--- name: azure-mgmt-botservice-py description: | 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". --- # Azure Bot Service Management SDK for Python Manage Azure Bot Service resources including bots, channels, and connections. ## Installation ```bash pip install azure-mgmt-botservice pip install azure-identity ``` ## Environment Variables ```bash AZURE_SUBSCRIPTION_ID= AZURE_RESOURCE_GROUP= ``` ## Authentication ```python 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 ```python 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="", msa_app_type="MultiTenant" ) ) ) print(f"Bot created: {bot.name}") ``` ## Get Bot Details ```python 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 ```python 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 ```python all_bots = client.bots.list() for bot in all_bots: print(f"Bot: {bot.name} in {bot.id.split('/')[4]}") ``` ## Update Bot ```python 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 ```python client.bots.delete( resource_group_name=resource_group, resource_name=bot_name ) ``` ## Configure Channels ### Add Teams Channel ```python 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 ```python 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 ```python 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 ```python channel = client.channels.get( resource_group_name=resource_group, resource_name=bot_name, channel_name="DirectLineChannel" ) ``` ## List Channel Keys ```python 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 ```python 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="", client_secret="", scopes="User.Read", service_provider_id="" ) ) ) ``` ### List Connections ```python 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` | Facebook | Messenger integration | | `EmailChannel` | Email | Email communication | ## Best Practices 1. **Use DefaultAzureCredential** for authentication 2. **Start with F0 SKU** for development, upgrade to S1 for production 3. **Store MSA App ID/Secret securely** — use Key Vault 4. **Enable only needed channels** — reduces attack surface 5. **Rotate Direct Line keys** periodically 6. **Use managed identity** when possible for bot connections 7. **Configure proper CORS** for Web Chat channel