「Botを使って、試しに社内問い合わせBotを作ってみたい!」
という方向けの記事です。
2018年9月に、簡単にお問い合わせBotが作れる(誇張じゃないよ!) BotFramework の バージョン4がリリースされました。
バージョン3の記事はいろいろ出てくるのですが、バージョン4の記事が少ないため 「社内問い合わせBot」 を作りながら情報を整理してみようと思います。
用意するもの
- Azure アカウント( 無料作成方法はこちら )
- Visual Studio
- お問い合わせウェブサイト、または、問い合わせ内容&回答がセットになったCSV
作成手順
Botアプリケーションの作成
まずBotの大枠のアプリケーションを作成します
- Visual Studioを起動 > ファイル > 新規作成 > プロジェクト
- オンライン > 検索ボックスに「bot」と入力 > Bot Builder V4 SDK Template for Visual Studio を選択 > OK
- 動作確認
- 何も変更せずに実行するとブラウザが起動します。
- ブラウザのページに表示されるDownload the Emulatorのリンクからご自分の環境にあったエミュレータをダウンロードします。現状の最新版はv4.1.0です。
- エミュレータを起動 > create a new bot configuration
-
Bot name
に任意の名前、Endpoint URL
http://localhost:3978/api/messages
を指定しSave and connect
。ファイルの保存を求められたら保存します。
- 適当に文字を打ち、発言がオウム返しされることが確認できました
QnAナレッジベースの作成
- QnAMakerのナレッジベースは実はBotとは切り離されたサービスのため、V3でもV4でも作成方法に変更ありません。
- 次の記事が参考になります→ 「QnAMaker」とは?Microsoftの自動チャットボット会話生成サービスを試してみた
QnAをBotにつなぎ込む
-
Bot Builder Echo Bot V4
プロジェクトのEchoWithCounterBot.cs
ファイルに必要な変更を加えます - 以下を追加
EchoWithCounterBot.cs
using System;
using System.Net.Http;
using System.Text;
using Newtonsoft.Json;
EchoWithCounterBot.cs
public class QnaResponse
{
public Answer[] Answers { get; set; }
}
public class Answer
{
public string[] questions { get; set; }
public string answer { get; set; }
public float score { get; set; }
}
EchoWithCounterBot.cs
public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
{
if (turnContext.Activity.Type == ActivityTypes.Message)
{
using (var client = new HttpClient())
{
using (var request = new HttpRequestMessage())
{
// リクエストの作成
var question = $"{{\"question\": \"{turnContext.Activity.Text}\"}}";
request.Method = HttpMethod.Post;
request.RequestUri = new Uri("***ここにURLを記載***");
request.Content = new StringContent(question, Encoding.UTF8, "application/json");
request.Headers.Add("Authorization", "EndpointKey " + "***ここにエンドポイントキーを記載***");
// リクエストを実行
var response = await client.SendAsync(request);
// レスポンスから回答を取り出し表示する
var respString = await response.Content.ReadAsStringAsync();
var qnaResponse = JsonConvert.DeserializeObject<QnaResponse>(respString);
await turnContext.SendActivityAsync($"{qnaResponse.Answers[0].answer}");
}
}
}
}
以上、お手軽社内問い合わせ対応Botを作る話でした。
参考
- BotBuilderV4_QnAMaker 参考にさせていただきました