Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8913

Microsoft Bot Framework SDK for JavaScript で特定のメッセージに特定の返答を返せるように実装してみる

$
0
0

はじめに~目的

この記事ではMicrosoft Bot Frameworkをベースにボットの挙動を編集してみました。

Microsoftの公式チュートリアルでは質問に対しておうむ返しするものと、Q&Aのチュートリアルがあります。
ただ、Q&A対応ボットのチュートリアルはいろいろ複雑で、どの部分がどのように動いているかがパッとわかりにくかったので、そもそもどの部分がBotの制御にどうかかわっているのか実際に動かして確認してみました。

目標

公式チュートリアル「Bot Framework SDK for JavaScript を使用したボットの作成」で作ったボットに「こんにちは」というメッセージが来た時だけ、「Hi」と返し、それ以外はEchoするように書き換えてみます。

前提条件

Windows10のローカル環境で実行します。

また、下記チュートリアルが完了している想定になります。
Bot Framework SDK for JavaScript を使用したボットの作成

このチュートリアルを実施すると、入力したものにそのままオウム返しするボットができます。

参考にしたもの

主にMicrosoft Bot Frameworkのリファレンスを参考にしています。
実行環境はBot Framework Emulatorで実行します。

また、@Shota_Fukudaさんの下記記事を参考にさせていただきました。
Bot Frameworkと雑談対話APIを使用したチャットBot

Microsoft Bot Frameworkの構造

前提条件にあるようなチュートリアルを実施していると、bot.tsが生成されますが、下記のようなEchobotクラスの制御があります。このEchoBotクラスがボット挙動の制御をしている部分になっています。
ここをいじることで返答をさせることができます。

node.js
exportclassEchoBotextendsActivityHandler{constructor(){super();// See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types.this.onMessage(async(context,next)=>{constreplyText=`Echo!!: ${context.activity.text}`;awaitcontext.sendActivity(MessageFactory.text(replyText,replyText));// By calling next() you ensure that the next BotHandler is run.awaitnext();});this.onMembersAdded(async(context,next)=>{constmembersAdded=context.activity.membersAdded;constwelcomeText='Hello and welcome!';for(constmemberofmembersAdded){if(member.id!==context.activity.recipient.id){awaitcontext.sendActivity(MessageFactory.text(welcomeText,welcomeText));}}// By calling next() you ensure that the next BotHandler is run.awaitnext();});}}

Microsoft Bot Frameworkが実行できる挙動(ActivityHandlerで定義されているハンドラ)に関しては、ボットのしくみ:ボットの構造の周辺に載っていますので、参考にしてみてください。

実際に構成してみる

「こんにちは」というメッセージが来た時だけ、「Hi」と返し、それ以外はEchoするように書き換えてみます。

メッセージに対して実行を書けるので、onMessageハンドラ内に編集します。

変更前
this.onMessage(async(context,next)=>{constreplyText=`Echo!!: ${context.activity.text}`;awaitcontext.sendActivity(MessageFactory.text(replyText,replyText));// By calling next() you ensure that the next BotHandler is run.awaitnext();});
変更後
this.onMessage(async(context,next)=>{letreplyText:string='';if(context.activity.text!=null&&context.activity.text==='こんにちは'){replyText=`HI!`;}else{replyText=`Echo!!: ${context.activity.text}`;}awaitcontext.sendActivity(MessageFactory.text(replyText,replyText));// By calling next() you ensure that the next BotHandler is run.awaitnext();});

ローカルでの反映

一旦動いているものを切って、下記のようにcmd上で再起動します。

npm start

ローカルで利用する分にはこれだけで書き換えたコードが機能します。すごい。

動作結果

ちゃんと「こんにちは」に対して「Hi!」と返してくれました。

image.png

参考資料


Viewing all articles
Browse latest Browse all 8913

Trending Articles