azure-mgmt-botservice-py
Azure Bot Service Management SDK for Python. Use for creating, managing, and configuring Azure Bot Service resources.
- risk
- unknown
- source
- community
- date added
- 2026-02-27
Azure Bot Service Management SDK for Python
Manage Azure Bot Service resources including bots, channels, and connections.
Installation
pip install azure-mgmt-botservice pip install azure-identity
Environment Variables
AZURE_SUBSCRIPTION_ID=<your-subscription-id> AZURE_RESOURCE_GROUP=<your-resource-group>
Authentication
from azure.identity import DefaultAzureCredential from azure.mgmt.botservice import AzureBotService import os credential = DefaultAzureCredential() client = AzureBotService( credential=credential, subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"] )
Create a Bot
from azure.mgmt.botservice import AzureBotService from azure.mgmt.botservice.models import Bot, BotProperties, Sku from azure.identity import DefaultAzureCredential import os credential = DefaultAzureCredential() client = AzureBotService( credential=credential, subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"] ) resource_group = os.environ["AZURE_RESOURCE_GROUP"] bot_name = "my-chat-bot" 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}")
Get Bot Details
bot = 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}")
List Bots in Resource Group
bots = client.bots.list_by_resource_group(resource_group_name=resource_group) for bot in bots: print(f"Bot: {bot.name} - {bot.properties.display_name}")
List All Bots in Subscription
all_bots = client.bots.list() for bot in all_bots: print(f"Bot: {bot.name} in {bot.id.split('/')[4]}")
Update Bot
bot = client.bots.update( resource_group_name=resource_group, resource_name=bot_name, properties=BotProperties( display_name="Updated Bot Name", description="Updated description" ) )
Delete Bot
client.bots.delete( resource_group_name=resource_group, resource_name=bot_name )
Configure Channels
Add Teams Channel
from 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 ) ) ) )
Add Direct Line Channel
from 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 ) ] ) ) ) )
Add Web Chat Channel
from 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 ) ] ) ) ) )
Get Channel Details
channel = client.channels.get( resource_group_name=resource_group, resource_name=bot_name, channel_name="DirectLineChannel" )
List Channel Keys
keys = 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}")
Bot Connections (OAuth)
Create Connection Setting
from 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>" ) ) )
List Connections
connections = 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}")
Client Operations
| 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 Options
| SKU | Description |
|---|---|
F0 | Free tier (limited messages) |
S1 | Standard tier (unlimited messages) |
Channel Types
| 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 | Messenger integration | |
EmailChannel | Email communication |
Best Practices
- Use DefaultAzureCredential for authentication
- Start with F0 SKU for development, upgrade to S1 for production
- Store MSA App ID/Secret securely — use Key Vault
- Enable only needed channels — reduces attack surface
- Rotate Direct Line keys periodically
- Use managed identity when possible for bot connections
- Configure proper CORS for Web Chat channel
When to Use
This skill is applicable to execute the workflow or actions described in the overview.