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://{{domainname}}.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://{{domainname}}.azurewebsites.net/.bot/v3/directline/tokens/generate
に POST 要求を呼び出します。
POST https://{{domainname}}.azurewebsites.net/.bot/v3/directline/tokens/generate
Authrozation: Bearer {{secretkey}}
応答としてトークンを取得できます。
200 OK
{
"conversationId": "K1oz...",
"token": "eyJhbGci...",
"expires_in": 1800
}
Web チャットにトークンを指定して初期化します。
window.WebChat.renderWebChat(
{
directLine: await window.WebChat.createDirectLineAppServiceExtension(
{
domain: 'https://{{domainname}}.azurewebsites.net/.bot/v3/directline',
token
}
)
},
document.getElementById('webchat')
);
おわりに
ここまでできれば、クライアントと Azure App Service のネットワークを閉域化するのは難しくないです。前回の記事とは異なり、エンド ツー エンドで通信を分離できるので、高度なセキュリティが要求されるボットではぜひ試してみてください。
Discussion
こんにちは「Karamem0」
まず、このブログ記事をありがとうございます。このブログの後、Kが「真」で、IBとOBが「偽」であるという問題を解決することができました
私はアウトプロセスホスティング構成を使用しましたが、後でK、IB、OBの3つの値すべてが「true」になりました。
ここで「アウトプロセス」設定がどのように役立ったか説明していただけますか。
言語の間違いは無視してください。私はグーグル翻訳を使用しています。:)
ありがとう、そしてよろしく
Jinder さん、こんにちは
コメントしていただいてありがとうございます。
アウト プロセス ホスティングについては以下のドキュメントを参考にしてください。