将机器人连接到 Direct Line

本文介绍如何将机器人连接到 Direct Line 通道。 使用此通道,通过客户端应用程序与机器人通信。

注意

Direct Line 是基于 HTTPS 协议的标准通道,通过该通道,客户端应用程序和机器人之间能够进行通信。 如果需要网络隔离,请改为使用基于 WebSocket Direct Line 应用服务扩展

先决条件

  • 一个 Azure 帐户。 如果你还没有该订阅,请在开始之前先创建试用版订阅
  • 发布到 Azure 的现有机器人。

添加 Direct Line 通道

首先需要向机器人添加 Direct Line 通道。

  1. 转到 Azure 门户
  2. 转到 Azure 机器人资源。 在机器人设置下,选择渠道
  3. 从可用频道列表中选择 Direct Line

机器人现已配置为使用默认站点使用 Direct Line。

或者,可以添加新网站,而不是使用默认站点。 选择 Direct Line 频道页面上的新建网站按钮以创建新网站。 Azure 门户中的 Direct Line 新站点按钮

管理密钥

添加 Direct Channel 时,Bot Framework 会生成密钥。 客户端应用程序使用这些密钥对其发出的与机器人进行通信的 Direct Line API 请求进行身份验证。 有关详细信息,请参阅身份验证

  1. 若要以纯文本查看网站的 Direct Line 密钥,请转到 Direct Line 通道页面。

  2. 选择Direct Line选项卡,然后选择要获取其密钥的网站,例如Default_Site。 Azure 将打开配置站点窗格。

  3. 密钥下,选择相应密钥旁边的眼睛图标。

    显示 Direct Line 键

  4. 复制并安全地存储密钥。 使用密钥对客户端应用程序发出的与机器人进行通信的 Direct Line API 请求进行身份验证

    注意

    不应在客户端应用程序中公开或嵌入机密。 请参阅下一步。

  5. 最佳做法是使用 Direct Line API 将密钥交换为令牌。 然后,客户端应用程序使用该令牌在单个会话范围内对其请求进行身份验证。

配置设置

若要配置网站设置,请执行以下操作:

  1. 在Direct Line 频道页上,从站点列表中选择要配置的站点。 配置网站窗格将打开,如下所示: 配置站点窗格

  2. 选择客户端应用程序将用于与机器人进行通信的 Direct Line 协议版本。

    提示

    如果要在客户端应用程序和机器人之间创建新连接,请使用 Direct Line API 3.0。

  3. 完成后,选择应用以保存站点配置。 对于要连接到机器人的每个客户端应用程序,可从添加新站点开始重复此过程。

配置增强身份验证

可用的站点配置之一是增强的身份验证选项,这有助于在连接到机器人时降低安全风险(例如,使用Web 聊天控制)。 有关详细信息,请参阅 Direct Line 增强身份验证

增强身份验证:

  1. 启用增强身份验证选项。 显示“必须至少有一个受信任的源”的消息,其中将显示一个 添加受信任的源链接。 如果启用增强身份验证,则必须指定至少一个受信任的源。

    受信任的原点是系统信任的域,用于对用户进行身份验证。 在这种情况下,Direct Line 使用域生成令牌。

    • 如果将受信任的源配置为配置 UI 页的一部分,则这些会始终用作生成令牌的唯一设置。 如果生成令牌或开始对话时,发送其他受信任的源(或将受信任的源设置为无),系统均会忽略它们(即,它们不追加到列表中,也不进行交叉验证)。
    • 如果未启用增强身份验证,则会使用作为 API 调用的一部分发送的任何源 URL。 添加可信来源
  2. 添加受信任的域 URL 后,选择应用

Direct Line 机器人示例

可以从此位置下载 .NET 示例:Direct Line 机器人示例

此示例包含两个项目:

  • DirectLineBot。 它创建要通过 Direct Line 通道连接的机器人。
  • DirectLineClient。 这是控制台应用程序,它通过 Direct Line 通道与前面的机器人通信。

Direct Line API

  • 必须从 Azure 机器人注册获取 Direct Line API 的凭据,并且仅允许调用方连接到为其生成凭据的机器人。 在机器人项目中,使用这些值更新 appsettings.json 文件。

    {
    "MicrosoftAppId": "",
    "MicrosoftAppPassword": ""
    }
    
  • 在 Azure 门户中,在通道列表中启用 Direct Line,然后配置 Direct Line 密钥。 确保选中版本 3.0 的复选框。 在控制台客户端项目中,使用 Direct Line 密钥和机器人句柄(机器人 ID)更新 App.config 文件。

    <appSettings>
        <add key="DirectLineSecret" value="YourBotDirectLineSecret" />
        <add key="BotId" value="YourBotHandle" />
    </appSettings>
    

通过 Direct Line 客户端 Conversations.PostActivityAsync 方法使用之前生成的 ConversationId 将用户消息发送到机器人。

while (true)
{
    string input = Console.ReadLine().Trim();

    if (input.ToLower() == "exit")
    {
        break;
    }
    else
    {
        if (input.Length > 0)
        {
            Activity userMessage = new Activity
            {
                From = new ChannelAccount(fromUser),
                Text = input,
                Type = ActivityTypes.Message
            };

            await client.Conversations.PostActivityAsync(conversation.ConversationId, userMessage);
        }
    }
}