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
=
""
,
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
=
""
,
client_secret
=
""
,
scopes
=
"User.Read"
,
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
Facebook
Messenger integration
EmailChannel
Email
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.