ボットを Direct Line に接続する

この記事では、ボットを Direct Line チャネルに接続する方法について説明します。 このチャネルを使用して、クライアント アプリケーション経由でボットと通信します。

Note

Direct Line は、クライアント アプリケーションとボット間の通信を可能にする HTTPS プロトコル経由の標準チャネルです。 代わりにネットワーク分離が必要な場合は、WebSocket 経由の Direct Line App Service Extension を使用してください。

前提条件

  • Azure アカウント。 まだお持ちでない場合は、開始する前に無料アカウントを作成してください。
  • Azure に公開された既存のボット。

Direct Line チャネルを追加する

最初に行う必要があるのは、Direct Line チャネルをボットに追加することです。

  1. Azure ポータルにアクセスします。
  2. Azure Bot リソースに移動します。 [ボットの設定] で、[チャネル] を選択します。
  3. 利用可能なチャネルのリストから [Direct Line] を選択します。

既定のサイトを使用して Direct Line を使用するようにボットが構成されました。

または、既定のサイトを使用する代わりに、新しいサイトを追加することもできます。 [Direct Line] チャネル ページの [新しいサイト] ボタンを選択して、新しいサイトを作成します。 Direct Line new site button in Azure portal

秘密鍵を管理する

ダイレクト チャネルを追加すると、Bot Framework によって秘密鍵が生成されます。 クライアント アプリケーションは、これらの鍵を使用して、ボットと通信するために発行する Direct Line API 要求を認証します。 詳細については、認証に関するページをご覧ください。

  1. サイトの Direct Line シークレットをプレーン テキストで表示するには、[Direct Line] チャネル ページに移動します。

  2. [Direct Line] タブを選択し、キーを取得するサイト (Default_Site など) を選択します。 Azure で [サイトの構成] ウィンドウが開きます。

  3. [秘密鍵] で、対応するキーの横にある目のアイコンを選択します。

    Show Direct Line keys

  4. 鍵をコピーして安全に保管します。 この鍵を使用して、クライアント アプリケーションがボットと通信するために発行する Direct Line API 要求を認証します。

    Note

    シークレットを公開したり、クライアント アプリケーションに埋め込んだりしないでください。 「次のステップ」を参照してください。

  5. 成功事例は、Direct Line API を使用してキーをトークンと交換することです。 その後、クライアント アプリケーションはトークンを使用して、1 つの会話のスコープ内で要求を認証します。

設定の構成

サイト設定を構成するには:

  1. [Direct Line チャネル] ページで、[サイト] リストから構成するサイトを選択します。 以下に示すように、[サイトの構成] ウィンドウが開きます: Configure site pane

  2. クライアント アプリケーションがボットとの通信に使用する Direct Line プロトコルのバージョンを選択します。

    ヒント

    クライアント アプリケーションとボットの間の新しい接続を作成する場合は、Direct Line API 3.0 を使います。

  3. 終わったら、[適用] をクリックしてサイトの構成を保存します。 ボットに接続するクライアント アプリケーションごとに、このプロセスを [新しいサイトの追加] から繰り返します。

強化された認証を構成する

使用可能なサイト構成の 1 つに拡張認証オプションがあります。これは、ボットに接続するときのセキュリティ リスクを軽減するのに役立ちます (たとえば、Web チャット コントロールを使用)。 詳細については、「Direct Line 拡張認証」を参照してください。

強化された認証を追加するには

  1. [認証オプションの拡張] を有効にします。 「信頼できる配信元が少なくとも 1 つ必要です」というメッセージが、[信頼された配信元の追加] リンクと共に表示されます。 拡張認証を有効にする場合は、少なくとも 1 つの信頼された配信元を指定する必要があります。

    信頼された配信元は、ユーザーの認証にシステムによって使用されるドメインです。 この場合、Direct Line はドメインを使用してトークンを生成します。

    • 構成 UI ページの一部として信頼できるオリジンを構成する場合、これらの設定は常にトークン生成の唯一のセットとして使用されます。 トークンの生成や会話の開始時に、追加の信頼できる配信元を送信する場合 (または信頼できるオリジンを none に設定する) と、無視されます (リストへの追加や相互検証は行われません)。
    • 拡張認証を有効にしなかった場合は、API 呼び出しの一部として送信した配信元 URL が使用されます。 Add trusted origin
  2. 信頼される側のドメイン URL を追加したら、[適用] を選択します。

Direct Line のサンプル ボット

.NET の例は、Direct Line Bot サンプルからダウンロードできます。

サンプルには、以下の 2 つのプロジェクトが含まれています。

  • DirectLineBot。 Direct Line チャネル経由で接続するボットが作成されます。
  • DirectLineClient。 これは、Direct Line チャネル経由で前のボットと通信するコンソール アプリケーションです。

Direct Line API

  • Direct Line API の資格情報は、Azure Bot の登録から取得する必要があります。これにより、呼び出し元は生成されたボットにのみ接続できるようになります。 ボット プロジェクトで、これらの値で appsettings.json ファイルを更新します。

    {
    "MicrosoftAppId": "",
    "MicrosoftAppPassword": ""
    }
    
  • Azure portal で、チャネルの一覧で 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 Client 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);
        }
    }
}