本文說明如何將 Bot 連線到 Direct Line 通道。 使用此通道透過用戶端應用程式與機器人通訊。
備註
Direct Line 是透過 HTTPS 通訊協定的標準通道,可允許用戶端應用程式與 Bot 之間的通訊。 如果您需要改為網路隔離,請透過 WebSockets 使用 Direct Line App Service 延伸模組。
先決條件
- Azure 帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
- 發佈至 Azure 的現有 Bot。
新增 Direct Line 通道
您需要做的第一件事是將 Direct Line 通道新增至您的機器人。
- 前往 Azure 入口網站。
- 移至您的 Azure Bot 資源。 在 Bot 設定下,選取 通道。
- 從可用通道清單中選取 Direct Line。
您的 Bot 現在已設定為通過 預設網站使用 Direct Line。
或者,您可以新增網站,而不是使用預設網站。 選取 Direct Line 管道頁面上的新增網站按鈕以建立新網站。
管理秘密金鑰
當您新增直接通道時,Bot Framework 會產生秘密金鑰。 您的用戶端應用程式會使用這些金鑰來驗證它發出的 Direct Line API 要求,以與機器人通訊。 如需詳細資訊,請參閱 驗證。
若要以純文字檢視網站的 Direct Line 密碼,請移至 Direct Line 通道頁面。
選取 [ Direct Line ] 索引標籤,然後選取您要取得金鑰的網站,例如 Default_Site。 Azure 會開啟 [設定網站] 窗格。
在 [秘密金鑰] 底下,選取對應金鑰旁邊的眼睛圖示。
複製並安全地儲存金鑰。 使用金鑰來驗證客戶端應用程式發出的 Direct Line API 請求,以對機器人進行通訊。
備註
秘密不應在用戶端應用程式中公開或內嵌。 請參閱下一步。
最佳做法是使用 Direct Line API 將 金鑰交換為權杖。 然後,用戶端應用程式將使用權杖在單一交談範圍內驗證其要求。
設定參數
若要設定您的網站設定:
在 Direct Line 通道頁面上,從 [網站] 清單中選取您要設定的網站。 [ 設定網站] 窗格隨即開啟,如下所示:
選取用戶端應用程式將用來與機器人通訊的 Direct Line 通訊協定版本。
小提示
如果您要在用戶端應用程式與機器人之間建立新的連線,請使用 Direct Line API 3.0。
完成後,選取 [套用] 以儲存網站設定。 對於每個您希望連接至機器人的用戶端應用程式,請從新的站點開始重複此程式。
設定增強型驗證
其中一個可用的網站設定是 增強型驗證選項,這有助於降低連線到機器人時的安全性風險 (例如,使用 Web 聊天控制項) 。 如需詳細資訊,請參閱 Direct Line 增強驗證。
若要新增增強型驗證:
啟用 增強驗證選項。 「您必須至少有一個受信任的來源」的訊息將顯示,並附有 「新增受信任的來源 」連結。 如果您啟用增強型驗證,則必須指定至少一個受信任的來源。
受信任來源是系統用來驗證使用者的網域。 在此情況下,Direct Line 會使用網域來生成令牌。
- 如果您在組態 UI 頁面中將受信任的來源設定為一部分,則這些設定將一律用作產生權杖的唯一設定。 在生成令牌或開始交談時傳送額外的受信任來源(或將受信任的來源設定為空)都會被忽略(這些來源不會被附加到清單中或進行交叉驗證)。
- 如果您未啟用增強型驗證,則會使用您在 API 呼叫中傳送的任何來源 URL。
新增受信任網域 URL 之後,選取 [套用]。
Direct Line 範例自動程式
您可以從以下位置下載 .NET 範例: Direct Line Bot 範例。
此範例包含兩個專案:
- DirectLineBot 它會建立機器人以透過 Direct Line 通道進行連線。
- DirectLineClient。 這是透過 Direct Line 通道與先前 Bot 通訊的主控台應用程式。
Direct Line API
Direct Line API 的認證必須從 Azure Bot 註冊取得,而且只會允許呼叫端連線到產生其的 Bot。 在機器人專案中,使用這些值更新
appsettings.json檔案。{ "MicrosoftAppId": "", "MicrosoftAppPassword": "" }在 Azure 入口網站中,在通道清單中啟用 Direct Line,然後設定 Direct Line 秘密。 請確定已勾選 3.0 版的核取方塊。 在主控台用戶端專案中,使用 Direct Line 秘密金鑰和機器人控制碼 (Bot 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);
}
}
}