Azure AI Bot Service の Direct Line App Service 拡張機能について
はじめに
前回の記事で説明しなかった Direct Line App Service 拡張機能について解説します。
Microsoft のドキュメントには以下に説明があります。
Azure AI Bot Service では、Teams、Slack、LINE などの外部サービスと連携できます。また、Direct Line を利用することで組織のサイトにもボットを追加できます。Direct Line を簡単に呼び出すための Web チャット コントロールも公開されており、JavaScript または React を使って組み込むことができます。
組織のサイトにボットを追加する際に問題となるのがセキュリティです。Direct Line の API は https://directline.botframework.com
で公開されています。クライアントが API を呼び出すと、Azure AI Bot Service から Bot Framework が実装された Azure App Service を呼び出します。この方法では通信がパブリック ネットワークを経由してしまうため、問題になる場合があります。Direct Line App Service 拡張機能を有効にすると、クライアントと Azure App Service を直接接続できるようになります。
実行手順
Direct Line App Service 拡張機能は Azure App Service に既定でインストールされています。Direct Line App Service 拡張機能を有効にするためには、ボットのコードに名前付きパイプを有効にする 1 行を追加します。ただし、ローカルでは Direct Line App Service 拡張機能を実行できないため、デプロイしたときのみ有効にする必要があります。
if (env.IsDevelopment())
{
_ = app.UseDeveloperExceptionPage();
}
else
{
_ = app.UseWebSockets();
_ = app.UseNamedPipes($"{Environment.GetEnvironmentVariable("APPSETTING_WEBSITE_SITE_NAME")}.directline");
}
アウトプロセス ホスティング モデルで動作するようにプロジェクト構成を変更します。
<PropertyGroup>
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>
Azure App Service に環境変数を 2 つ追加します。
キー | 値 |
---|---|
DirectLineExtensionKey | Azure AI Bot Service の チャンネル - Direct Line - App Service 拡張機能 にある拡張キー |
DIRECTLINE_EXTENSION_VERSION | latest |
実行結果
https://{{domain-name}}.azurewebsites.net/.bot
にアクセスすると、以下のようなメッセージが返されます。K、IB、OB、Initialized のすべての値が true であればセットアップ完了です。
{"V":"1.2.0.0.e84fbf1863c30abdf7b40dc11a91bc86044d49a2","K":true,"IB":true,"OB":true,"Initialized":true}
Update your Bot Framework SDK version to 4.18.1 or later will fix IB/OB false issue.
Web チャットで表示させる場合は、Direct Line の秘密キーを指定する前にトークンを取得する必要があります。https://{{domain-name}}.azurewebsites.net/.bot/v3/directline/tokens/generate
に POST 要求を送信します。
POST https://{{domain-name}}.azurewebsites.net/.bot/v3/directline/tokens/generate
Authrozation: Bearer {{secret-key}}
応答としてトークンを取得できます。
200 OK
{
"conversationId": "K1oz...",
"token": "eyJhbGci...",
"expires_in": 1800
}
Web チャットにトークンを指定して初期化します。
window.WebChat.renderWebChat(
{
directLine: await window.WebChat.createDirectLineAppServiceExtension(
{
domain: 'https://{{domain-name}}.azurewebsites.net/.bot/v3/directline',
token
}
)
},
document.getElementById('webchat')
);
おわりに
ここまでできれば、クライアントと Azure App Service のネットワークを閉域化するのは難しくありません。前回の記事とは異なり、エンドツーエンドで通信を分離できるため、高度なセキュリティが要求されるボットではぜひ試してみてください。
Discussion
こんにちは「Karamem0」
まず、このブログ記事をありがとうございます。このブログの後、Kが「真」で、IBとOBが「偽」であるという問題を解決することができました
私はアウトプロセスホスティング構成を使用しましたが、後でK、IB、OBの3つの値すべてが「true」になりました。
ここで「アウトプロセス」設定がどのように役立ったか説明していただけますか。
言語の間違いは無視してください。私はグーグル翻訳を使用しています。:)
ありがとう、そしてよろしく
Jinder さん、こんにちは
コメントしていただいてありがとうございます。
アウト プロセス ホスティングについては以下のドキュメントを参考にしてください。