##概要
今回は、マイクロソフトが11月15日にリリースした、「Azure Bot Service」を使って、チャットボットを10分で作ってみたいと思います。
##事前に必要なもの
- Azureのサブスクリプション
##使い方
-
まず、Azure Portalから、「新規」>「Intelligence + Analytics」>「Bot Service」の順に選択し、項目を記入し、「作成」をクリックします。
-
開くと、Microsoft App IDの作成が求められます。「Create Microsoft App ID and Password」をクリックします。
-
アプリ名は(1)で設定したアプリ名、アプリIDは自動で生成されます。「アプリパスワードを生成して続行」をクリックします。
-
パスワードが表示されます。表示されたパスワードをメモ帳等のテキストエディタへ貼り付けて、「OK」をクリックします。パスワードは後程利用します。
-
次に、作成するBOTのテンプレートを選びます。今回は、Formを選択しますが、ほかにも色々用意されています:
Basic - 単純に入力した内容をオウム返しするBOTです。
Form - FormFlowを利用してアンケートを取るBOTが作成できます。
Proactive - Azure Functionsのトリガーイベントで、Azure Botに動作させるテンプレートです。
Language understanding - 自然言語解析のLUISを組み合わせたテンプレートです。
##日本語化の手順
テンプレートままだと、英語になるので、日本語化します。
a) BasicForm.csxを以下のコードへ置換します。
using System;
using Microsoft.Bot.Builder.FormFlow;
public enum CarOptions { コンバーチブル = 1, SUV, 電気自動車 };
public enum ColorOptions { 赤 = 1, 白, 青 };
// For more information about this template visit http://aka.ms/azurebots-csharp-form
[Serializable]
public class BasicForm
{
[Prompt("こんにちは! あなたの名前はなんですか?")]
public string Name { get; set; }
[Prompt("好みの車種を教えてください {||}")]
public CarOptions Car { get; set; }
[Prompt("好きな色を教えてください。 {||}")]
public ColorOptions Color { get; set; }
public static IForm<BasicForm> BuildForm()
{
// Builds an IForm<T> based on BasicForm
return new FormBuilder<BasicForm>().Build();
}
public static IFormDialog<BasicForm> BuildFormDialog(FormOptions options = FormOptions.PromptInStart)
{
// Generated a new FormDialog<T> based on IForm<BasicForm>
return FormDialog.FromForm(BuildForm, options);
}
}
b) MainDialog.csxを以下のコードへ変換します。
#load "BasicForm.csx"
using System;
using System.Threading.Tasks;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder.FormFlow;
using Microsoft.Bot.Connector;
/// This dialog is the main bot dialog, which will call the Form Dialog and handle the results
[Serializable]
public class MainDialog : IDialog<BasicForm>
{
public MainDialog()
{
}
public Task StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
return Task.CompletedTask;
}
public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
var message = await argument;
context.Call(BasicForm.BuildFormDialog(FormOptions.PromptInStart), FormComplete);
}
private async Task FormComplete(IDialogContext context, IAwaitable<BasicForm> result)
{
try
{
var form = await result;
if (form != null)
{
await context.PostAsync("アンケートにお答えいただき、ありがとうございました。何か文字を入力するとアンケートが始まります。");
}
else
{
await context.PostAsync("フォームは空でした。もう一度入力して、アンケートをはじめてください");
}
}
catch (OperationCanceledException)
{
await context.PostAsync("アンケートがキャンセルされました。アンケートを再開するには、何か文字を入力してください。");
}
context.Wait(MessageReceivedAsync);
}
}
c) 2016/11/19現在、コードを書き換えただけでは、Azure Functionsのように変更内容が完全に反映されるわけではみたいなので(気のせいかもしれませんが)、いったん、このAzure Bot Serviceが稼働しているベースとなるApp Serviceを再起動します。
再起動する方法は、「Settings」をクリックします。