Microsoft Bot Frameworkでボットを作成してみよう:特集: 新たなアプリ「ボット」の時代(3/4 ページ)
マイクロソフトが突如として発表したBot Framework。これを使ってボットを作成するための基本を見てみよう。
ユーザー入力の内容の利用
今度はユーザー入力をそのまま返すだけのボットを作成してみる。これにはaddメソッドに渡すfunctionの引数「session」を利用する。以下にコードを示す。ここではbot.addメソッドの内容だけを表示する。
bot.add('/', function (session) {
session.send(session.message.text);
});
session.messageプロパティには、ユーザーが入力した内容に関する各種の設定が保存される。その中でも、session.message.textプロパティがユーザーが入力したテキスト自体を表しているので、これをそのまま返送するだけだ。
sessionオブジェクトには、この他にも多くのデータが設定される。ユーザーとの会話の中で、そのセッションにのみ有効なデータを保存するには、userDataプロパティを使用できる。ユーザーに名前を聞いて、これを使ってあいさつをするようにしてみよう。
bot.add('/', function (session) {
if (!session.userData.name) {
session.beginDialog('/getname');
} else {
session.send("hello, " + session.userData.name);
}
});
bot.add('/getname', [
function(session) {
builder.Prompts.text(session, "what's your name ?");
},
function(session, results) {
session.userData.name = results.response;
session.send('Hello, ' + session.userData.name);
session.endDialog();
}
]);
まず、「session.userData.name」プロパティの有無でその後の会話が変化する。なければ、新しいルート(またはID)「/getname」で会話が始まる。あれば、そのプロパティを使ってあいさつをしている。前者で使われているbeginDialogメソッドで指定したルート「/getname」を追加しているのが、協調書体で表示されているbot.addメソッド呼び出しだ。
ここではBot Builderで「ウオーターフォール」と呼ばれる機構を使用している。ウオーターフォールは、一連の流れを持った会話をボットで行うためのものだ。第2引数は関数の配列となっていて、会話の進行に合わせて、「上から順に」それらの関数が実行されていく。直前の関数の結果は、次の関数の第2引数(ここではresults)に渡される。この会話の場合は、次のような流れがあるということだ。
- ユーザーに名前を聞く(会話開始)
- 名前を覚えて、あいさつをする(会話終了)
この流れを、関数を使って表したのが上記のウオーターフォールになる。beginDialogメソッド呼び出しで開始した会話は、endDialogメソッドで終了する。また、ウオーターフォールの各関数の中でユーザーに何らかの問い合わせを行うには、Promptsクラスの各種メソッドを使用する必要がある。ここではtextメソッドを使用しているが、これは問い合わせに対して、ユーザーが自由形式で解答するような場合に使用する。
この他にも、幾つかの選択肢を提示するchoiceメソッド、yes/no形式でユーザーに確認を求めるconfirmメソッドなどがPromptsクラスには用意されている。これらのメソッドを使うことで、例えばフードの注文(何を食べるか→幾つ食べるか→トッピングは何か→ポテトはいかがですか)など、流れのある会話を実現する。
以下に例を示す。最後の「hello」→「hello, Insider.NET」という会話は「/」ルートでの会話だ(「h」と「H」の違いに注意)。
beginDialogメソッドにより、新しい会話が始まると、それまでの会話(この場合は「/」ルートの会話)はサスペンドされる。endDialogメソッドで新しい会話が終了すると、以前の会話がレジュームされるようになっている。
上の画像ではボットからの「what's your name ?」という問い合わせでどんなデータが返送されてきたかを、[JSON]ペーンに表示している。これを見ると、「/」→「/getname」という会話の遷移が「callstack」プロパティに表示されているのが分かるはずだ(なお、ユーザー名を取得した直後のあいさつが表示された時点で「/getname」ルートは終了しているため、コールスタックにはこれが表示されない)。
本稿の最後に、ボットのもう1つの大きな特徴である「コマンド」について見てみよう。
Copyright© Digital Advantage Corp. All Rights Reserved.