您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

部署机器人

适用于: SDK v4

本文介绍如何将基本机器人部署到 Azure。 我们将介绍如何对机器人进行部署准备、如何将机器人部署到 Azure,以及如何在网上聊天中测试机器人。 在执行相关步骤之前最好是先阅读本文,以完全了解在部署机器人时所涉及到的工作。

重要

确保使用的是最新版本的 Azure CLI。 如果使用的 Azure CLI 版本早于 2.2.0,则会遇到 CLI 命令弃用的错误。 另外,请勿将本文所示的 Azure CLI 部署与 Azure 门户部署混合使用。

先决条件

准备部署

如果要部署 C# 机器人,请确保它已在“发布”模式下进行了生成。 在 Visual Studio 中,请确保将解决方案配置设置为“版本”,并在继续操作之前执行解决方案的干净重新生成。 如果解决方案配置设置为"调试",则部署 可能会失败

使用自定义模板 创建Visual Studio时,生成的源代码包含 DeploymentTemplates 一个包含 ARM 模板的文件夹。 本文所述的部署过程使用一个 ARM 模板通过 Azure CLI 在 Azure 中预配机器人所需的资源。

在发布 Bot Framework SDK 4.3 以后,我们已弃用 .bot 文件, 而是使用 appsettings.json 配置文件来管理机器人资源。 有关将设置从 .bot 文件迁移到配置文件的信息,请参阅 管理机器人资源

备注

VSIX包包括 .net core 2.1 和 .net core 3.1 版本的 c # 模板。 在 Visual Studio 2019 中创建新的机器人时,应使用 .NET Core 3.1 模板。 当前机器人示例使用 .NET Core 3.1 模板。 可在 BotBuilder-Samples 存储库的 4.7-存档分支中找到使用 .NET Core 2.1 模板的示例。 有关将 .NET Core 3.1 bot 部署到 Azure 的详细信息,请参阅如何将 机器人部署到 azure

登录到 Azure

在本地创建并测试一个机器人后,即可将它部署到 Azure。 打开命令提示符以登录到 Azure 门户。

az login

此时会打开一个用于登录的浏览器窗口。

备注

如果将机器人部署到非 Azure 云(例如 US Gov),则需在 az login 之前运行 az cloud set --name <name-of-cloud>,其中的 <name-of-cloud> 是已注册云(例如 AzureUSGovernment)的名称。 若要回到公有云,可以运行 az cloud set --name AzureCloud

设置订阅

设置要使用的默认订阅。

az account set --subscription "<azure-subscription-id>"

如果不确定要使用哪个订阅来部署机器人,可以使用命令查看帐户的订阅列表 az account list

创建应用程序注册

此步骤创建 Azure 应用程序注册,可以实现:

  • 用户通过一组通道(例如网上聊天)与机器人交互。
  • 定义 OAuth 连接设置,以便对用户进行身份验证,并创建由机器人用来代表用户访问受保护资源的令牌。

创建 Azure 应用程序注册

若要创建 Azure 应用程序注册,请执行以下命令:

az ad app create --display-name "displayName" --password "AtLeastSixteenCharacters_0" --available-to-other-tenants
选项 说明
display-name 应用程序的显示名称。 它在 Azure 门户的常规资源列表和所属资源组中列出。
password 应用程序的密码,也称“客户端密钥”。 这是你为此资源创建的密码。 它的长度必须至少为 16 个字符,至少包含 1 个大写或小写字母字符,并至少包含 1 个特殊字符。
available-to-other-tenants 表示可以从任何 Azure AD 租户使用该应用程序。 设置此项即可让机器人使用 Azure 机器人服务通道。

记录 appId 和 appSecret 值

复制并保存 appIdpassword 值。 在 ARM 部署步骤中需要用到它们。

创建机器人应用程序服务

创建机器人应用程序服务时,可以通过 Azure 资源管理器 (ARM) 模板在新的或现有的资源组中部署机器人。 ARM 模板是一个 JSON 文件,它以声明方式定义一个或多个 Azure 资源,并定义所部署资源之间的依赖关系。 请确保你有机器人项目 ARM 部署模板目录 DeploymentTemplates 的正确路径,需要它将值分配给模板文件。 请选择最合适的选项:

重要

无法将 Python 和 Java bot 部署到包含 Windows 服务/bot 的资源组。 可以将多个 Python bot 部署到同一资源组,但需要在其他资源组中创建 (LUIS、QnA 等 ) 的其他服务。

通过 ARM 模板部署新资源组

在此步骤中,我们创建一个机器人应用程序服务,用于设置机器人的部署阶段。 我们使用 ARM 模板、新的服务计划和新的资源组。 运行以下 Azure cli 命令,以从本地模板文件启动订阅范围的部署。

提示

将 ARM 模板用于 新的资源组 ,template-with-new-rg.js 上的

az deployment sub create --template-file "<path-to-template-with-new-rg.json" --location <region-location-name> --parameters appId="<app-id-from-previous-step>" appSecret="<password-from-previous-step>" botId="<id or bot-app-service-name>" botSku=F0 newAppServicePlanName="<new-service-plan-name>" newWebAppName="<bot-app-service-name>" groupName="<new-group-name>" groupLocation="<region-location-name>" newAppServicePlanLocation="<region-location-name>" --name "<bot-app-service-name>"

备注

此步骤可能需要几分钟才能完成。

选项 说明
name 部署名称。
template-file ARM 模板的路径。 通常情况下,template-with-new-rg.json 文件在机器人项目的 deploymentTemplates 文件夹中提供。 这是现有模板文件的路径。 它可以是绝对路径,也可以是当前目录的相对路径。 所有机器人模板都生成 ARM 模板文件。
location 位置。 az account list-locations 中的值。 可以使用 az configure --defaults location=<location> 配置默认位置。
parameters 部署参数,作为“键=值”对的列表提供。 输入以下参数值:
  • appId - 创建应用程序 注册步骤中生成的 JSON 输出 中的应用 ID 值。
  • appSecret - 创建应用程序注册步骤提供的密码。
  • botId - 要创建的“机器人通道注册”资源的名称。 它必须全局唯一。 它用作不可变的机器人 ID。 它也用作默认显示名称,这是可变的。
  • botSku - 定价层,可以是 F0(免费)或 S1(标准)。
  • newAppServicePlanName - 新应用程序服务计划的名称。
  • newWebAppName - 机器人应用程序服务的名称。
  • groupName - 新资源组的名称。
  • groupLocation - Azure 资源组的位置。
  • newAppServicePlanLocation - 应用程序服务计划的位置。

通过 ARM 模板部署现有资源组

在此步骤中,我们创建一个机器人应用程序服务,用于设置机器人的部署阶段。 使用现有的资源组时,可以使用现有的应用服务计划或新建一个计划。 请选择最合适的选项:

备注

此步骤可能需要几分钟才能完成。

选项 1:现有的应用服务计划

在本例中,我们将使用现有的应用服务计划,但会创建新的 Web 应用和机器人通道注册。

下面的这一命令设置机器人的 ID 和显示名称。 botId 参数应全局唯一,用作不可变的机器人 ID。 机器人的显示名称可变。

提示

将 ARM 模板用于 现有资源组 ,template-with-preexisting-rg.js 上的

az deployment group create --resource-group "<name-of-resource-group>" --template-file "<path-to-template-with-preexisting-rg.json>" --parameters appId="<app-id-from-previous-step>" appSecret="<password-from-previous-step>" botId="<id or bot-app-service-name>" newWebAppName="<bot-app-service-name>" existingAppServicePlan="<name-of-app-service-plan>" appServicePlanLocation="<region-location-name>" --name "<bot-app-service-name>"
选项 2:新的应用服务计划

在本例中,我们将创建应用服务计划、Web 应用和机器人通道注册。

提示

将 ARM 模板用于 现有资源组 ,template-with-preexisting-rg.js 上的

az deployment group create --resource-group "<name-of-resource-group>" --template-file "<path-to-template-with-preexisting-rg.json>" --parameters appId="<app-id-from-previous-step>" appSecret="<password-from-previous-step>" botId="<id or bot-app-service-name>" newWebAppName="<bot-app-service-name>" newAppServicePlanName="<name-of-app-service-plan>" newAppServicePlanLocation="<region-location-name>" --name "<bot-app-service-name>"
选项 说明
name 部署名称。
resource-group Azure 资源组的名称。
template-file ARM 模板的路径。 通常情况下,template-with-preexisting-rg.json 文件在项目的 deploymentTemplates 文件夹中提供。 这是现有模板文件的路径。 它可以是绝对路径,也可以是当前目录的相对路径。 所有机器人模板都生成 ARM 模板文件。
location 位置。 az account list-locations 中的值。 可以使用 az configure --defaults location=<location> 配置默认位置。
parameters 部署参数,作为“键=值”对的列表提供。 输入以下参数值:
  • appId - appId 创建应用程序注册 步骤生成的 值。
  • appSecret - 在创建应用程序注册步骤 中提供的密码
  • botId - 要创建的“机器人通道注册”资源的名称。 它必须全局唯一。 它用作不可变的机器人 ID。 它也用作默认显示名称,这是可变的。
  • newWebAppName - 机器人应用程序服务的名称。
  • newAppServicePlanName - 要创建的应用程序服务计划资源的名称。
  • appServicePlanLocation - 应用程序服务计划的位置。

准备要部署的代码

分配应用程序 Id 和密码

分配 Azure 机器人资源 应用 Id密码 来配置要部署的机器人。 将其值分配给相关变量: MicrosoftAppIdMicrosoftAppPassword 包含在机器人项目配置文件中。 该文件因创建机器人所使用的编程语言而异,如下表所示。

语言 文件名
Csharp appsettings.json
JavaScript .env
Java application.properties
Python config.py

准备项目

在部署机器人之前,必须准备项目文件。

确保处于机器人的项目文件夹中。 然后准备机器人代码以进行部署。

az bot prepare-deploy --lang Csharp --code-dir "." --proj-file-path "MyBot.csproj"

必须提供 .csproj 文件的相对于 --code-dir 的路径 可以通过 --proj-file-path 参数执行此操作。 该命令会将 --code-dir 和 --proj-file-path 解析为“./MyBot.csproj”。

此命令会在机器人项目文件夹中生成 .deployment 文件。

包项目

使用未配置的 zip deploy API 部署机器人的代码时,Web 应用/Kudu 的行为如下所述:

默认情况下,Kudu 假设 zip 文件中的部署已准备好运行,并且在部署期间不需要额外的生成步骤,例如,不需要执行 npm 安装或 dotnet 还原/dotnet 发布。

必须将生成的代码以及所有必要的依赖项包含在要部署的 zip 文件中,否则机器人不会按预期方式工作。

重要

在压缩项目文件之前,请确保你是在机器人的项目文件夹中。

  • 对于 C# 机器人,正确的文件夹是包含 .csproj 文件的文件夹。
  • 对于 JavaScript 机器人,正确的文件夹是包含 app.js 或 index.js 文件的文件夹。
  • 对于 TypeScript 机器人,正确的文件夹是包含 src 文件夹(bot.ts 和 index.ts 文件所在之处)的文件夹。
  • 对于 Python 机器人,正确的文件夹是包含 app.py 文件的文件夹。

在项目文件夹中,请确保在运行命令之前选择所有文件和文件夹来创建 zip 文件。 这会在项目文件夹中只创建一个 zip 文件。 如果根文件夹位置不正确,机器人将无法在 Azure 门户中运行

将代码部署到 Azure

现在,我们已准备好将代码部署到 Azure Web 应用。

在命令行中运行以下命令,以使用 Web 应用的 Kudu zip 推送部署来执行部署。

az webapp deployment source config-zip --resource-group "<resource-group-name>" --name "<name-of-web-app>" --src "<project-zip-path>"
选项 说明
resource-group 包含机器人的 Azure 资源组的名称。
name 先前使用的 Web 应用的名称。
src 创建的压缩的项目文件的路径。

备注

此步骤可能需要几分钟才能完成。 另外,在部署完成后,可能还需要等待几分钟,然后才能使用机器人进行测试。

通过网页聊天执行测试

  1. 在浏览器中,转到 Azure 门户
  2. 单击左侧面板中的“资源组” 。
  3. 在右侧面板中搜索你的组。
  4. 单击组名。
  5. 单击机器人通道注册的链接。
  6. 在“机器人通道注册” 面板中,单击“在 Web Chat 中测试”。 也可在右侧面板中单击“测试”框。

有关机器人通道注册的详细信息,请参阅使用机器人服务注册机器人

其他信息

将机器人部署到 Azure 需要支付服务使用费。 计费和成本管理一文可帮助你了解 Azure 计费方式、如何监视使用量与费用,以及如何管理帐户和订阅。 另请参阅 Azure Command-Line Interface (CLI) 文档Azure CLI 发行说明

后续步骤