你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
教程:使用语音启用机器人
可以使用 Azure AI 语音,通过语音启用聊天机器人。
本教程使用 Microsoft Bot Framework 来创建可回应说话内容的机器人。 将机器人部署到 Azure,然后将其注册到 Bot Framework Direct Line Speech 通道。 然后,配置适用于 Windows 的示例客户端应用,以便对机器人讲话并收听机器人做出的响应。
若要完成本教程,无需广泛了解或熟悉 Azure、Bot Framework 机器人或 Direct Line Speech。
在本教程中创建语音启用的聊天机器人的步骤如下:
- 将示例客户端应用程序配置为连接到 Direct Line Speech 通道和回显机器人。
- 当用户按下相应按钮时,将从麦克风流式传输语音音频。 或者,在使用了自定义关键字时,则会连续录制音频。
- 如果使用了自定义关键字,关键字检测将在本地设备上进行,这会限制发往云中的音频流。
- 示例客户端应用程序使用 Speech SDK 连接到 Direct Line Speech 通道并流式传输音频。
- (可选)服务中将进行更高准确度的关键字验证。
- 音频将传递到语音识别服务并听录为文本。
- 识别的文本作为 Bot Framework 活动传递到回显机器人。
- 响应文本由文本转语音服务转换为音频,并流式传输回到客户端应用程序进行播放。
注意
本教程中的步骤无需使用付费服务。 Azure 新用户可以使用 Azure 免费试用订阅及语音服务免费层的额度来完成本教程。
本教程的内容:
- 创建新的 Azure 资源。
- 生成、测试回显机器人示例并将其部署到 Azure 应用服务。
- 将机器人注册到 Direct Line Speech 通道。
- 生成并运行 Windows 语音助理客户端以便与回显机器人交互。
- 添加自定义关键字激活。
- 了解如何更改已识别语音和讲话语音的语言。
先决条件
若要完成本教程,需完成以下事项:
- 一台 Windows 10 电脑以及正常工作的麦克风和扬声器(或耳机)。
- 装有“ASP.NET 和 Web 开发”工作负载的 Visual Studio 2017 或更高版本。
- .NET Framework Runtime 4.6.1 或更高版本。
- 一个 Azure 帐户。 免费注册。
- GitHub 帐户。
- 适用于 Windows 的 Git。
创建资源组
在本教程中创建的客户端应用会使用少量的 Azure 服务。 为了减少机器人所做响应的往返时间,请确保这些服务位于同一 Azure 区域。
本部分将引导你在美国西部区域创建资源组。 在为 Bot Framework、Direct Line Speech 通道和语音服务创建各个资源时,使用此资源组。
- 请转到“Azure 门户”页创建资源组。
- 提供以下信息:
- 将“订阅”设置为“免费试用版”。 (也可以使用现有订阅。)
- 在“资源组”中输入资源组名称。 建议输入 SpeechEchoBotTutorial-ResourceGroup。
- 从“区域”下拉菜单中选择“美国西部”。
- 选择“查看并创建”。 此时应会出现一个显示“已通过验证”的横幅。
- 选择“创建”。 创建资源组可能需要几分钟时间。
- 最好是将此资源组固定到仪表板以便于访问,对于稍后在本教程中创建的资源,也是如此。 如果要固定此资源组,请选择其名称旁边的固定图标。
选择 Azure 区域
确保使用支持的 Azure 区域。 Direct Line Speech 通道使用文本转语音服务,该服务提供神经语音和标准语音。 一些 Azure 区域使用神经语音,其他 Azure 区域使用标准语音(即将停用)。
有关区域的详细信息,请参阅 Azure 位置。
创建资源
在支持的区域中创建资源组后,下一步是为要在本教程中使用的每个服务创建各个资源。
创建语音服务资源
- 请转到“Azure 门户”页创建语音服务资源。
- 提供以下信息:
- 对于“名称”,建议使用“SpeechEchoBotTutorial-Speech”作为资源的名称。
- 对于“订阅”,请确保选择“免费试用版”。
- 对于“位置”,请选择“美国西部”。
- 对于“定价层”,请选择“F0”。 它是免费层。
- 对于“资源组”,请选择“SpeechEchoBotTutorial-ResourceGroup”。
- 输入所有必需信息后,选择“创建”。 创建资源可能需要几分钟时间。
- 稍后在本教程中,需要用到此服务的订阅密钥。 随时可以从资源的“概述”区域(“管理密钥”下)或“密钥”区域访问这些密钥。
此时,请检查资源组 (SpeechEchoBotTutorial-ResourceGroup) 是否包含语音服务资源:
名称 | 类型 | 位置 |
---|---|---|
SpeechEchoBotTutorial-Speech | 语音 | 美国西部 |
创建 Azure 应用服务计划
应用服务计划为要运行的 Web 应用定义一组计算资源。
- 请转到“Azure 门户”页创建 Azure 应用服务计划。
- 提供以下信息:
- 将“订阅”设置为“免费试用版”。 (也可以使用现有订阅。)
- 对于“资源组”,请选择“SpeechEchoBotTutorial-ResourceGroup”。
- 对于“名称”,建议使用“SpeechEchoBotTutorial-AppServicePlan”作为计划的名称。
- 对于“操作系统”,请选择“Windows” 。
- 对于“区域”,请选择“美国西部”。
- 对于“定价层”,请确保选择“标准 S1”。 这应是默认值。 如果不是,则将“操作系统”设置为“Windows”。
- 选择“查看并创建”。 此时应会出现一个显示“已通过验证”的横幅。
- 选择“创建”。 创建资源可能需要几分钟时间。
此时,请检查资源组 (SpeechEchoBotTutorial-ResourceGroup) 是否包含两个资源:
名称 | 类型 | 位置 |
---|---|---|
SpeechEchoBotTutorial-AppServicePlan | 应用服务计划 | 美国西部 |
SpeechEchoBotTutorial-Speech | Azure AI 服务 | 美国西部 |
生成回显机器人
创建资源后,请从回显机器人示例开始,该示例回显输入的文本作为响应。 示例代码已配置为使用 Direct Line Speech 通道,稍后将机器人部署到 Azure 后会连接该通道。
注意
GitHub 上该示例的自述文件中提供了以下说明,以及有关回显机器人的详细信息。
在计算机上运行机器人示例
克隆示例存储库:
git clone https://github.com/Microsoft/botbuilder-samples.git
打开 Visual Studio。
在工具栏中,选择“文件”>“打开”>“项目/解决方案”。 此时将打开项目解决方案:
samples\csharp_dotnetcore\02.echo-bot\EchoBot.sln
加载项目后,选择 F5 键生成并运行该项目。
在打开的浏览器中,会看到类似以下屏幕:
使用 Bot Framework Emulator 测试机器人示例
Bot Framework Emulator 是一个桌面应用,可让机器人开发人员在本地(或通过隧道在远程)测试和调试其机器人。 Emulator 接受键入的文本作为输入(不是语音)。 机器人还通过文本进行响应。
请遵循以下步骤,使用 Bot Framework Emulator 通过文本输入和文本输出测试本地运行的回显机器人。 将机器人部署到 Azure 后,通过语音输入和语音输出对其进行测试。
安装 Bot Framework Emulator 4.3.0 或更高版本。
打开 Bot Framework Emulator,然后选择“文件”>“打开机器人”。
输入机器人的 URL。 例如:
http://localhost:3978/api/messages
选择“连接”。
机器人应会发出“你好,欢迎!”问候消息。 键入任意文本消息,并确认收到了来自机器人的响应。
将机器人部署到 Azure 应用服务
下一步是将回显机器人部署到 Azure。 可以通过多种方式部署机器人,包括 Azure CLI 和部署模板。 本教程重点介绍如何从 Visual Studio 直接发布。
注意
如果在执行以下步骤时未出现“发布”,请使用 Visual Studio 安装程序添加“ASP.NET 和 Web 开发”工作负载。
在 Visual Studio 中,打开已配置为与 Direct Line Speech 通道配合使用的回显机器人:
samples\csharp_dotnetcore\02.echo-bot\EchoBot.sln
在“解决方案资源管理器”中,右键单击“EchoBot”项目并选择“发布”。
在打开的“发布”窗口中:
- 选择“Azure”>“下一步”。
- 选择“Azure 应用服务(Windows)”>“下一步”。
- 选择绿色加号旁边的“创建新的 Azure 应用服务”。
当“应用服务(Windows)”窗口出现时:
单击“添加帐户”,然后使用 Azure 帐户凭据登录。 如果已登录,请从下拉列表中选择你的帐户。
对于“名称”,请为机器人输入全局唯一的名称。 此名称用于创建唯一的机器人 URL。
方框中将显示包含日期和时间的默认名称(例如“EchoBot20190805125647”)。 对于本教程,可以使用默认名称。
对于“订阅”,请选择“免费试用版”。
对于“资源组”,请选择“SpeechEchoBotTutorial-ResourceGroup”。
对于“托管计划”,请选择“SpeechEchoBotTutorial-AppServicePlan”。
选择“创建”。 在最后一个向导屏幕上,选择“完成”。
选择“发布”。 Visual Studio 会将该机器人部署到 Azure。
Visual Studio 的输出窗口中应会出现如下所示的成功消息:
Publish Succeeded. Web App was published successfully https://EchoBot20190805125647.azurewebsites.net/
默认浏览器应会打开并显示一个页面,其中指出“你的机器人已就绪!”
此时,请在 Azure 门户中检查资源组(“SpeechEchoBotTutorial-ResourceGroup”)。 确认它包含以下三个资源:
名称 | 类型 | 位置 |
---|---|---|
EchoBot20190805125647 | 应用服务 | 美国西部 |
SpeechEchoBotTutorial-AppServicePlan | 应用服务计划 | 美国西部 |
SpeechEchoBotTutorial-Speech | Azure AI 服务 | 美国西部 |
启用 Web 套接字
需要进行少量的配置更改,使机器人能够使用 Web 套接字来与 Direct Line Speech 通道通信。 遵循以下步骤启用 Web 套接字:
- 转到 Azure 门户并选择你的应用服务资源。 该资源的名称应类似于 EchoBot20190805125647(你的唯一应用名称)。
- 在左侧窗格的“设置”下选择“配置”。
- 选择“常规设置”选项卡。
- 找到“Web 套接字”的切换开关,将其设置为“打开”。
- 选择“保存”。
提示
可以使用 Azure 应用服务页顶部的控件来停止或重启该服务。 进行故障排除时,此功能会很方便。
创建通道注册
创建了用于托管机器人的 Azure 应用服务资源后,下一步是创建通道注册。 创建通道注册是将机器人注册到 Bot Framework 通道(包括 Direct Line Speech 通道)的先决条件。 若要详细了解机器人如何使用通道,请参阅将机器人连接到通道。
- 请转到“Azure 门户”页创建 Azure 机器人。
- 提供以下信息:
对于“机器人句柄”,请输入“SpeechEchoBotTutorial-BotRegistration-####”。 用许多选项替换 ####x。
注意
机器人句柄必须全局唯一。 如果输入某个编号后收到错误消息“请求的机器人 ID 不可用”,请选择其他编号。 以下示例使用“8726”。
对于“订阅”,请选择“免费试用版”。
对于“资源组”,请选择“SpeechEchoBotTutorial-ResourceGroup”。
对于“位置”,请选择“美国西部”。
对于“定价层”,请选择“F0”。
忽略“自动创建应用 ID 和密码”。
- 在“Azure 机器人”窗格底部,选择“创建”。
- 创建资源后,在 Azure 门户中打开“SpeechEchoBotTutorial-BotRegistration-####”资源。
- 在“设置”区域中,选择“配置”。
- 对于“消息传送终结点”,请输入 Web 应用的 URL 并追加 “/api/messages” 路径。 例如:如果全局唯一的应用名称为 EchoBot20190805125647,则消息传送终结点将是:
https://EchoBot20190805125647.azurewebsites.net/api/messages/
。
此时,请在 Azure 门户中检查资源组(“SpeechEchoBotTutorial-ResourceGroup”)。 它现在应显示至少四个资源:
名称 | 类型 | 位置 |
---|---|---|
EchoBot20190805125647 | 应用服务 | 美国西部 |
SpeechEchoBotTutorial-AppServicePlan | 应用服务计划 | 美国西部 |
SpeechEchoBotTutorial-BotRegistration-8726 | 机器人服务 | 全球 |
SpeechEchoBotTutorial-Speech | Azure AI 服务 | 美国西部 |
重要
尽管选择的是“美国西部”,但 Azure AI 机器人服务资源却显示“全球”区域。 这是正常情况。
可选:网络聊天测试
“Azure 机器人”页的“设置”下提供“通过 Web 聊天执行测试”选项。 默认情况下,此功能不适用于你的机器人,因为 Web 聊天需要对机器人进行身份验证。
如果要使用文本输入测试已部署的机器人,请使用以下步骤。 这些步骤是可选的,不执行这些步骤也能继续完成本教程。
在“设置”区域中,选择“配置”。 复制“Microsoft 应用 ID”下的值。
打开 Visual Studio EchoBot 解决方案。 在解决方案资源管理器中,找到并双击“appsettings.json”。
将 JSON 文件中“MicrosoftAppId”旁边的空字符串替换为复制的 ID 值。
返回到 Azure 门户。 在“设置”区域中,选择“配置”。 然后选择“Microsoft 应用 ID”旁边的“管理”。
选择“新建客户端机密”。 添加说明(例如 "Web 聊天")并选择“添加”。 复制新机密。
将 JSON 文件中“MicrosoftAppPassword”旁边的空字符串替换为复制的机密值。
保存 JSON 文件。 代码应该如下所示:
{ "MicrosoftAppId": "YourAppId", "MicrosoftAppPassword": "YourAppPassword" }
重新发布应用:在 Visual Studio 解决方案资源管理器中右键单击“EchoBot”项目,选择“发布”,然后选择“发布”按钮。
注册 Direct Line Speech 通道
现在是将机器人注册到 Direct Line Speech 通道的时候了。 此通道在机器人与使用语音 SDK 编译的客户端应用之间创建连接。
在 Azure 门户中找到并打开“SpeechEchoBotTutorial-BotRegistration-####”资源。
在“设置”区域中,选择“通道”,然后执行以下步骤:
- 在“更多通道”下,选择“Direct Line Speech”。
- 查看“配置 Direct Line Speech”页中的文本,然后展开“认知服务帐户”下拉菜单。
- 从菜单中选择前面创建的语音服务资源(例如“SpeechEchoBotTutorial-Speech”),将机器人关联到订阅密钥。
- 忽略余下的可选字段。
- 选择“保存”。
在“设置”区域中,选择“配置”,然后执行以下步骤:
- 选中“启用流式处理终结点”复选框。 要想在机器人与 Direct Line Speech 通道之间创建基于 Web 套接字的通信协议,此步骤是必需的。
- 选择“保存”。
若要了解详细信息,请参阅将机器人连接到 Direct Line Speech。
运行 Windows 语音助理客户端
Windows 语音助理客户端是以 C# 编写的一个 Windows Presentation Foundation (WPF) 应用,它使用语音 SDK 通过 Direct Line Speech 通道来管理与机器人的通信。 在编写自定义客户端应用之前,请使用语音助理客户端来与机器人交互并对其进行测试。 该客户端是开源的,因此你可以下载并运行可执行文件,或者自行生成。
Windows 语音助理客户端提供一个简单 UI,可让你配置与机器人的连接、查看文本对话、以 JSON 格式查看 Bot Framework 活动,以及显示自适应卡片。 它还支持使用自定义关键字。 使用此客户端来与机器人对话,并接收语音响应。
注意
此时,请确认麦克风和扬声器已启用并可正常工作。
按照其中的说明执行以下操作:
- 下载要运行的预生成可执行文件 .zip 包
- 通过克隆存储库并生成项目来自行生成可执行文件
按照 GitHub 存储库中的说明,打开 VoiceAssistantClient.exe 客户端应用程序并将其配置为连接到你的机器人。
选择“重新连接”,确保看到消息“已启动新对话 - 请键入内容或按下麦克风按钮”。
让我们进行测试。选择麦克风按钮,并讲出几句英语。 当你讲话时,识别到的文本将会显示。 在你说完后,机器人将以自己的语音给出回复,它会说“复述”,然后讲出识别到的话语。
也可以使用文本来与机器人交谈。 只需在底部栏中键入文本即可。
排查 Windows 语音助理客户端中的错误
如果在主应用窗口中收到错误消息,请参考下表来确定并排查问题:
消息 | 你应该如何操作? |
---|---|
错误(AuthenticationFailure): WebSocket 升级失败并出现身份验证错误(401)。 请检查资源密钥(或授权令牌)和区域名称是否正确 | 在应用的“设置”页中,请确保正确输入了密钥及其区域。 |
错误(ConnectionFailure): 远程主机关闭了连接。 错误代码: 1011。 错误详细信息: 在发送消息之前无法连接到机器人 | 确保选中了“启用流式处理终结点”复选框和/或启用了 Web 套接字。 确保 Azure 应用服务正在运行。 如果是,请尝试重新启动它。 |
错误(ConnectionFailure): 远程主机关闭了连接。 错误代码: 1002。 错误详细信息: 当状态代码应为 '101' 时,服务器返回了状态代码 '503' | 确保选中了“启用流式处理终结点”复选框和/或启用了 Web 套接字。 确保 Azure 应用服务正在运行。 如果是,请尝试重新启动它。 |
错误(ConnectionFailure): 远程主机关闭了连接。 错误代码: 1011。 错误详细信息: 响应状态代码不是指示成功: 500 (InternalServerError) | 机器人在其输出活动的讲话字段中指定了神经语音,但与你的资源密钥关联的 Azure 区域不支持神经语音。 请参阅神经语音和标准语音。 |
如果表格中的操作未解决你的问题,请参阅语音助手:常见问题解答。 如果在遵循本教程中的所有步骤后仍无法解决问题,请在语音助理 GitHub 页中输入新问题。
有关连接超时的说明
如果你已连接到机器人,但在过去五分钟内未发生任何活动,则服务将自动关闭与客户端和机器人建立的 Web 套接字连接。 这是设计的结果。 底部栏中会出现一条消息:“活动连接已超时,但可按需重新连接”。
无需选择“重新连接”按钮。 按下麦克风按钮并开始讲话,输入文本消息或者讲出关键字(如果已启用)。 随后将自动重新建立连接。
查看机器人活动
每个机器人都会发送和接收活动消息。 在 Windows 语音助理客户端的“活动日志”窗口中,带时间戳的日志显示客户端从机器人接收的每个活动。 通过使用 DialogServiceConnector.SendActivityAsync 方法,还可以查看客户端发送到机器人的活动。 选择某个日志项时,会以 JSON 格式显示关联活动的详细信息。
下面是客户端接收到的活动的示例 JSON:
{
"attachments":[],
"channelData":{
"conversationalAiData":{
"requestInfo":{
"interactionId":"8d5cb416-73c3-476b-95fd-9358cbfaebfa",
"version":"0.2"
}
}
},
"channelId":"directlinespeech",
"conversation":{
"id":"129ebffe-772b-47f0-9812-7c5bfd4aca79",
"isGroup":false
},
"entities":[],
"from":{
"id":"SpeechEchoBotTutorial-BotRegistration-8726"
},
"id":"89841b4d-46ce-42de-9960-4fe4070c70cc",
"inputHint":"acceptingInput",
"recipient":{
"id":"129ebffe-772b-47f0-9812-7c5bfd4aca79|0000"
},
"replyToId":"67c823b4-4c7a-4828-9d6e-0b84fd052869",
"serviceUrl":"urn:botframework:websocket:directlinespeech",
"speak":"<speak version='1.0' xmlns='https://www.w3.org/2001/10/synthesis' xml:lang='en-US'><voice name='en-US-JennyNeural'>Echo: Hello and welcome.</voice></speak>",
"text":"Echo: Hello and welcome.",
"timestamp":"2019-07-19T20:03:51.1939097Z",
"type":"message"
}
若要详细了解 JSON 输出中返回的内容,请参阅活动中的字段。 对于本教程,可以将重点放在文本和讲话字段上。
查看对语音 SDK 发出的调用的客户端源代码
Windows 语音助理客户端使用 NuGet 包 Microsoft.CognitiveServices.Speech,其中包含语音 SDK。 使用 VoiceAssistantClient\MainWindow.xaml.cs 文件中的 InitSpeechConnector()
方法可以非常方便地查看示例代码。该方法创建以下两个语音 SDK 对象:
- DialogServiceConfig:用于资源密钥及其区域等配置设置。
- DialogServiceConnector:管理用于处理识别到的语音和机器人响应的通道连接和客户端订阅事件。
添加自定义关键字激活
语音 SDK 支持自定义关键字激活。 类似于在 Microsoft 助手中讲出“你好,小娜”,你可以编写一个应用,以便持续收听所选的关键字。 请记住,关键字可以是单词,也可以是词组。
注意
术语“关键字”经常可与术语“唤醒词”互换使用。 你可能会在 Microsoft 文档中看到这两种用法。
关键字检测是在客户端应用中进行的。 如果使用关键字,则只有在检测到关键字时,才会将音频流式传输到 Direct Line Speech 通道。 Direct Line Speech 通道包含称作“关键字验证”的组件,该组件在云中执行更复杂的处理,以验证所选关键字是否位于音频流的开头。 如果关键字验证成功,则通道将与机器人通信。
遵循以下步骤创建关键字模型,将 Windows 语音助理客户端配置为使用此模型,然后在机器人上对其进行测试:
- 使用语音服务创建自定义关键字。
- 解压缩在上一步骤中下载的模型文件。 该文件应已根据你的关键字命名。 查找的文件应该名为 kws.table。
- 在 Windows 语音助理客户端中,找到“设置”菜单(右上角的齿轮图标)。 对于“模型文件路径”,输入步骤 2 中获取的 kws.table 文件的完整路径名。
- 选中“已启用”复选框。 在复选框的旁边应会看到以下消息:“下次连接时将会收听关键字”。如果提供了错误的文件或无效路径,应会看到错误消息。
- 输入“订阅密钥”和“订阅密钥区域”的值,然后选择“确定”关闭“设置”菜单。
- 选择“重新连接”。 此时应会看到一条消息,指出:“已启动新对话 - 请键入内容、按下麦克风按钮,或者讲出关键字”。应用现在会持续收听。
- 讲出以关键字开头的任何短语。 例如:“{你的关键字},现在是什么时间?”你无需在讲出关键字后暂停讲话。 完成后,将发生两种情况:
- 你会看到讲话内容的听录版本。
- 你会听到机器人的响应。
- 继续使用机器人支持的三种输入类型进行试验:
- 在底部栏上输入文本
- 按下麦克风图标并讲话
- 讲出以关键字开头的短语
查看启用关键字检测的源代码
在 Windows 语音助手客户端的源代码中,使用以下文件查看用于启用关键字检测的代码:
- VoiceAssistantClient\Models.cs 包含对语音 SDK 方法 KeywordRecognitionModel.fromFile() 的调用。 此方法用于实例化磁盘上的本地文件中的模型。
- VoiceAssistantClient\MainWindow.xaml.cs 包含对语音 SDK 方法 DialogServiceConnector.StartKeywordRecognitionAsync() 的调用。 此方法可激活连续关键字检测。
可选:更改语言和机器人语音
创建的机器人将会收听英语讲话内容并以英语作答,使用默认的美式英语文本转语音声音。 但是,你并不局限于使用英语,也就是默认语音。
在部分介绍如何更改机器人收听和回答的语言。 其中还介绍了如何为该语言选择不同的语音。
更改语言
可以从语音转文本表格中提到的语言中选择任何一种。 以下示例将语言更改为德语。
打开 Windows 语音助理客户端应用,选择“设置”按钮(右上角的齿轮图标),然后在“语言”字段中输入“de-de”。 这是语音转文本表格中提到的区域设置值。
此步骤会设置要识别的讲话语言,并重写默认的“en-us”。 它还会指示 Direct Line Speech 通道使用默认的德语语音作为机器人的回复语音。
关闭“设置”页,然后选择“重新连接”按钮来与回显机器人建立新连接。
选择麦克风按钮,并讲出一个德语短语。 此时会显示已识别的文本,而回显机器人将以默认的德语语音给出回复。
更改默认的机器人语音
如果机器人以语音合成标记语言 (SSML) 而不是简单文本的形式指定了回复,则可以选择文本转语音声音并控制发音。 回显机器人不使用 SSML,但你可以轻松修改代码来让它这样做。
以下示例将 SSML 添加到回显机器人回复,以使用德语语音 de-DE-RalfNeural
(男性语音),而不是默认的女性语音。 参阅你的语言所支持的标准语音列表和神经语音列表。
打开 samples\csharp_dotnetcore\02.echo-bot\echo-bot.cs。
找到这些行:
var replyText = $"Echo: {turnContext.Activity.Text}"; await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
将其替换为以下代码:
var replyText = $"Echo: {turnContext.Activity.Text}"; var replySpeak = @"<speak version='1.0' xmlns='https://www.w3.org/2001/10/synthesis' xml:lang='de-DE'> <voice name='de-DE-RalfNeural'>" + $"{replyText}" + "</voice></speak>"; await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replySpeak), cancellationToken);
在 Visual Studio 中生成解决方案并修复任何生成错误。
方法 MessageFactory.Text
中的第二个参数设置机器人回复中的活动讲话字段。 做出上述更改后,其已从简单文本替换为 SSML,以指定非默认的德语语音。
重新部署机器人
对机器人做出所需的更改后,下一步是将它重新发布到 Azure 应用服务并尝试使用它:
在“解决方案资源管理器”窗口中,右键单击“EchoBot”项目并选择“发布”。
以前的部署配置已作为默认值加载。 选择“EchoBot20190805125647 - Web 部署”旁边的“发布”。
“发布成功”消息将显示在 Visual Studio 输出窗口中,同时会打开一个网页,其中显示了消息“你的机器人已准备就绪!”。
打开 Windows 语音助理客户端应用。 选择“设置”按钮(右上角齿轮图标),并确保“语言”字段仍设置为“de-de”
按照运行 Windows 语音助理客户端中的说明重新连接到新部署的机器人,以新的语言讲话,然后将会听到机器人使用该语言以新的语音给出回复。
清理资源
如果你不打算继续使用本教程中部署的回显机器人,只需删除 Azure 资源组,即可删除该机器人及其关联的所有 Azure 资源:
- 在 Azure 门户中,选择“Azure 服务”下的“资源组”。
- 找到“SpeechEchoBotTutorial-ResourceGroup”资源组。 选择三点图标 (...)。
- 选择“删除资源组”。
浏览文档
- 部署到你附近的 Azure 区域以改进机器人的响应时间。
- 部署到支持优质神经文本转语音的 Azure 区域。
- 获取与 Direct Line Speech 通道相关的定价:
- 生成和部署自己的拥有语音能力的机器人: