Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Azure Bot Service Management SDK for Python. Use for creating, managing, and configuring Azure Bot Service resources. Triggers: "azure-mgmt-botservice", "AzureBotService", "bot management", "conversational AI", "bot channels".
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 48% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 39% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 98% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 131% | 0% |
Manage Azure Bot Service resources including bots, channels, and connections.
bashpip install azure-mgmt-botservice pip install azure-identity
bashAZURE_SUBSCRIPTION_ID=<your-subscription-id> # Required for all auth methods AZURE_RESOURCE_GROUP=<your-resource-group> # Required for all auth methods AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
> 🔑 Two rules apply to every code sample below: > > 1. Prefer DefaultAzureCredential. It works locally (Azure CLI / VS Code / Developer CLI) and in Azure (managed identity, workload identity) with no code change. Avoid connection strings, account/API keys — they bypass Entra audit and rotation. > - Local dev: DefaultAzureCredential works as-is. > - Production: set AZURE_TOKEN_CREDENTIALS=prod (or AZURE_TOKEN_CREDENTIALS=<specific_credential>) to constrain the credential chain to production-safe credentials. > 2. Wrap every client in a context manager so HTTP transports, sockets, and token caches are released deterministically: > - Sync: with <Client>(...) as client: > - Async: async with <Client>(...) as client: and async with DefaultAzureCredential() as credential: (from azure.identity.aio) > > Snippets may abbreviate this setup, but production code should always follow both rules.
pythonfrom azure.identity import DefaultAzureCredential, ManagedIdentityCredential from azure.mgmt.botservice import AzureBotService import os # Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential> credential = DefaultAzureCredential(require_envvar=True) # Or use a specific credential directly in production: # See https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes # credential = ManagedIdentityCredential() with AzureBotService( credential=credential, subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"] ) as client: # Use `client` for all subsequent operations (see examples below) ...
pythonfrom azure.mgmt.botservice import AzureBotService from azure.mgmt.botservice.models import Bot, BotProperties, Sku from azure.identity import DefaultAzureCredential import os resource_group = os.environ["AZURE_RESOURCE_GROUP"] bot_name = "my-chat-bot" credential = DefaultAzureCredential() with AzureBotService( credential=credential, subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"] ) as client: bot = client.bots.create( resource_group_name=resource_group, resource_name=bot_name, parameters=Bot( location="global", sku=Sku(name="F0"), # Free tier kind="azurebot", properties=BotProperties( display_name="My Chat Bot", description="A conversational AI bot", endpoint="https://my-bot-app.azurewebsites.net/api/messages", msa_app_id="<your-app-id>", msa_app_type="MultiTenant" ) ) ) print(f"Bot created: {bot.name}")
pythonbot = client.bots.get( resource_group_name=resource_group, resource_name=bot_name ) print(f"Bot: {bot.properties.display_name}") print(f"Endpoint: {bot.properties.endpoint}") print(f"SKU: {bot.sku.name}")
pythonbots = client.bots.list_by_resource_group(resource_group_name=resource_group) for bot in bots: print(f"Bot: {bot.name} - {bot.properties.display_name}")
pythonall_bots = client.bots.list() for bot in all_bots: print(f"Bot: {bot.name} in {bot.id.split('/')[4]}")
pythonbot = client.bots.update( resource_group_name=resource_group, resource_name=bot_name, properties=BotProperties( display_name="Updated Bot Name", description="Updated description" ) )
pythonclient.bots.delete( resource_group_name=resource_group, resource_name=bot_name )
pythonfrom azure.mgmt.botservice.models import ( BotChannel, MsTeamsChannel, MsTeamsChannelProperties ) channel = client.channels.create( resource_group_name=resource_group, resource_name=bot_name, channel_name="MsTeamsChannel", parameters=BotChannel( location="global", properties=MsTeamsChannel( properties=MsTeamsChannelProperties( is_enabled=True ) ) ) )
pythonfrom azure.mgmt.botservice.models import ( BotChannel, DirectLineChannel, DirectLineChannelProperties, DirectLineSite ) channel = client.channels.create( resource_group_name=resource_group, resource_name=bot_name, channel_name="DirectLineChannel", parameters=BotChannel( location="global", properties=DirectLineChannel( properties=DirectLineChannelProperties( sites=[ DirectLineSite( site_name="Default Site", is_enabled=True, is_v1_enabled=False, is_v3_enabled=True ) ] ) ) ) )
pythonfrom azure.mgmt.botservice.models import ( BotChannel, WebChatChannel, WebChatChannelProperties, WebChatSite ) channel = client.channels.create( resource_group_name=resource_group, resource_name=bot_name, channel_name="WebChatChannel", parameters=BotChannel( location="global", properties=WebChatChannel( properties=WebChatChannelProperties( sites=[ WebChatSite( site_name="Default Site", is_enabled=True ) ] ) ) ) )
pythonchannel = client.channels.get( resource_group_name=resource_group, resource_name=bot_name, channel_name="DirectLineChannel" )
pythonkeys = client.channels.list_with_keys( resource_group_name=resource_group, resource_name=bot_name, channel_name="DirectLineChannel" ) # Access Direct Line keys if hasattr(keys.properties, 'properties'): for site in keys.properties.properties.sites: print(f"Site: {site.site_name}") print(f"Key: {site.key}")
pythonfrom azure.mgmt.botservice.models import ( ConnectionSetting, ConnectionSettingProperties ) connection = client.bot_connection.create( resource_group_name=resource_group, resource_name=bot_name, connection_name="graph-connection", parameters=ConnectionSetting( location="global", properties=ConnectionSettingProperties( client_id="<oauth-client-id>", client_secret="<oauth-client-secret>", scopes="User.Read", service_provider_id="<service-provider-id>" ) ) )
pythonconnections = client.bot_connection.list_by_bot_service( resource_group_name=resource_group, resource_name=bot_name ) for conn in connections: print(f"Connection: {conn.name}")
| Operation | Method | |-----------|--------| | client.bots | Bot CRUD operations | | client.channels | Channel configuration | | client.bot_connection | OAuth connection settings | | client.direct_line | Direct Line channel operations | | client.email | Email channel operations | | client.operations | Available operations | | client.host_settings | Host settings operations |
| SKU | Description | |-----|-------------| | F0 | Free tier (limited messages) | | S1 | Standard tier (unlimited messages) |
| Channel | Class | Purpose | |---------|-------|---------| | MsTeamsChannel | Microsoft Teams | Teams integration | | DirectLineChannel | Direct Line | Custom client integration | | WebChatChannel | Web Chat | Embeddable web widget | | SlackChannel | Slack | Slack workspace integration | | FacebookChannel | Facebook | Messenger integration | | EmailChannel | Email | Email communication |
azure.xxx sync clients with azure.xxx.aio async clients in the same call path. Choose one mode per module.with Client(...) as client: (sync) or async with Client(...) as client: (async). For async DefaultAzureCredential from azure.identity.aio, also use async with credential: so tokens and transports are cleaned up.DefaultAzureCredential for code that runs locally. Use a specific token credential for code that runs in Azure.| File | Contents | |------|----------| | references/capabilities.md | Additional non-hero capabilities, operation-group coverage, and production checklists. | | references/non-hero-scenarios.md | Dedicated non-hero examples for secondary/advanced scenarios. |
Other measured skills in the registry, with their headline benchmark lift.