LoginSignup
5
2

More than 5 years have passed since last update.

お手軽社内問い合わせ対応Botを作る話

Posted at

「Botを使って、試しに社内問い合わせBotを作ってみたい!」
という方向けの記事です。

2018年9月に、簡単にお問い合わせBotが作れる(誇張じゃないよ!) BotFrameworkバージョン4がリリースされました。
バージョン3の記事はいろいろ出てくるのですが、バージョン4の記事が少ないため 「社内問い合わせBot」 を作りながら情報を整理してみようと思います。

用意するもの

  • Azure アカウント( 無料作成方法はこちら )
  • Visual Studio
  • お問い合わせウェブサイト、または、問い合わせ内容&回答がセットになったCSV 00.PNG

作成手順

Botアプリケーションの作成

まずBotの大枠のアプリケーションを作成します

  1. Visual Studioを起動 > ファイル > 新規作成 > プロジェクト
  2. オンライン > 検索ボックスに「bot」と入力 > Bot Builder V4 SDK Template for Visual Studio を選択 > OK
    • 初めて作成する場合はダウンロードするか聞かれるのでそれもOKします 01.PNG
  3. 動作確認
    • 何も変更せずに実行するとブラウザが起動します。
    • ブラウザのページに表示されるDownload the Emulatorのリンクからご自分の環境にあったエミュレータをダウンロードします。現状の最新版はv4.1.0です。

02.PNG

  • エミュレータを起動 > create a new bot configuration 03.PNG
  • Bot name に任意の名前、 Endpoint URL http://localhost:3978/api/messages を指定し Save and connect 。ファイルの保存を求められたら保存します。 04.PNG
  • 適当に文字を打ち、発言がオウム返しされることが確認できました 05.PNG

QnAナレッジベースの作成

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; }
    }
  • OnTurnAsync() メソッドを以下で上書きします。
  • エンドポイントキー、URLはQnAMakerのSETTINGSに記載されています。 06.PNG
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}");
                    }
                }
            }
        }

  • 動作確認。エミュレータでQnAMakerの返答が表示されることが確認できました。 07.PNG 08.PNG

以上、お手軽社内問い合わせ対応Botを作る話でした。

参考

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2