Azure Bot Service Python 管理 SDK

azure-mgmt-botservice-py
分类编程
作者Agentic Awesome Skills 社区
许可MIT
评分4.40/5
使用16.1K

Azure Bot Service Management SDK for Python

管理 Azure Bot Service 资源,包括机器人、频道和连接。

安装

bash
pip install azure-mgmt-botservice
pip install azure-identity

环境变量

bash
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
AZURE_RESOURCE_GROUP=<your-resource-group>

身份验证

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"]
)

创建机器人

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"), # 免费层级
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}")

获取机器人详情

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}")

列出资源组中的机器人

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}")

列出订阅中的所有机器人

python
all_bots = client.bots.list()

for bot in all_bots:
print(f"Bot: {bot.name} in {bot.id.split('/')[4]}")

更新机器人

python
bot = client.bots.update(
    resource_group_name=resource_group,
    resource_name=bot_name,
    properties=BotProperties(
        display_name="Updated Bot Name",
        description="Updated description"
    )
)

删除机器人

python
client.bots.delete(
    resource_group_name=resource_group,
    resource_name=bot_name
)

配置频道

添加 Teams 频道

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

添加 Direct Line 频道

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

code
### 添加 Web Chat 频道
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
)
]
)
)
)
)

code
## 获取频道详情
python
channel = client.channels.get(
resource_group_name=resource_group,
resource_name=bot_name,
channel_name="DirectLineChannel"
)
code
## 列出频道密钥
python
keys = client.channels.list_with_keys(
resource_group_name=resource_group,
resource_name=bot_name,
channel_name="DirectLineChannel"
)

访问 Direct Line 密钥

if hasattr(keys.properties, 'properties'): for site in keys.properties.properties.sites: print(f"Site: {site.site_name}") print(f"Key: {site.key}")
code
## 机器人连接 (OAuth)

创建连接设置

python import os 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=os.environ["BOT_OAUTH_CLIENT_SECRET"],
scopes="User.Read",
service_provider_id="<service-provider-id>"
)
)
)

code
### 列出连接
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.bots | 机器人 CRUD 操作 |
|
client.channels | 频道配置 |
|
client.bot_connection | OAuth 连接设置 |
|
client.direct_line | Direct Line 频道操作 |
|
client.email | 电子邮件频道操作 |
|
client.operations | 可用操作 |
|
client.host_settings | 主机设置操作 |

SKU 选项

| SKU | 描述 |
|-----|-------------|
|
F0 | 免费层级(消息数量有限) |
|
S1 | 标准层级(消息数量无限制) |

频道类型

| 频道 | 类 | 用途 |
|---------|-------|---------|
|
MsTeamsChannel | Microsoft Teams | Teams 集成 |
|
DirectLineChannel | Direct Line | 自定义客户端集成 |
|
WebChatChannel | Web Chat | Web 聊天集成 |
|
WebChatChannel | Web Chat | 可嵌入的 Web 控件 |
|
SlackChannel | Slack | Slack 工作区集成 |
|
FacebookChannel | Facebook | Messenger 集成 |
|
EmailChannel` | Email | 电子邮件通信 |

最佳实践

1. 使用 DefaultAzureCredential 进行身份验证
2. 开发阶段从 F0 SKU 开始,生产环境升级至 S1
3. 安全存储 MSA App ID/Secret —— 建议使用 Key Vault
4. 仅启用必要的渠道 —— 以减少攻击面
5. 定期轮换 Direct Line 密钥
6. 机器人连接尽可能使用托管身份 (Managed Identity)
7. 为 Web Chat 渠道配置正确的 CORS

适用场景

本技能适用于执行概览中所描述的工作流或操作。

局限性

  • 仅在任务明确符合上述范围时使用此技能。
  • 不要将输出结果视为针对特定环境的验证、测试或专家评审的替代方案。
  • 如果缺少必要的输入、权限、安全边界或成功标准,请停止操作并寻求澄清。