Dialogflowを使った自然言語処理(4) 会話の分岐(Condition)

時間による分岐

チャットボットを作る場合に、同じユーザ入力に対しても、時間によって応答を変更したい場合があります。例えば、お店のボットだったら営業時間内か否かで分岐するような場合です。

今回は、朝「おはよう」といった時に11時までだったら「おはようございます、今は、HH:MMです」と応答し、11時以後は「もう、お昼ですよ」と返してみます。Dialogflowのエディションは、CXを使います。

System function

Dialogflowで使えるシステム関数はこちらのリファレンスページに記載されています。今回使う関数は、現在時刻を取得する”$sys.func.NOW()”と、時刻を切り出すための ”$sys.func.FORMAT_DATE(<time>, <format>)”の2つです。

$sys.func.NOW()で取得できる時刻はDialogflowエージェントを作成するときに定めたタイムゾーンの時刻になります。

$sys.func.FORMAT_DATE()は、日付、時刻のフォーマットを揃えるための関数ですが、<format>に”HH"を指定することで時刻を取り出すことができます。

Page Routes

start pageに「おはよう」intentのRouteを2つ作ります。

1つ目の「おはよう」Routeには、Conditionで時刻による条件($sys.func.FORMAT_DATE($sys.func.NOW(), "HH") >= 11)を追加し、Fulfillmentで「もうお昼ですよ」と応答させます。

2つ目の「おはよう」は条件をつけることなく、Fulfillmentで、「おはようございます。今は、$sys.func.FORMAT_DATE($sys.func.NOW(),"HH:mm")です。」 と応答させます。

Routeは上から順に評価されますので、条件が厳しい方を上位に配置します。

簡単な条件であれば、以上のような方法で分岐させることができますが、条件分岐が複雑になる場合には、webhookによってFunction内で処理をして応答を生成することを検討すべきかと思います。

感情による分岐

Conditionの説明で感情による分岐ができそうなことが書いてありましたが、現時点ではテストシミュレータが日本語は対応してしていない様です。

英語のエージェントの場合には、Sentiment analysisにチェックすることができます。

Sentiment Analysys自体は日本語も対応している様なので(Language Table)、実際の開発時には、ESの時と同様にanalyzeQueryTextSentimentをtrueにして呼び出せば良いかと思いますが、検証はまた次の機会にしたいと思います。(公式ドキュメント

ご参考)

Dialogflowの感情分析結果(sentimentAnalysisResult)を取得する

以下の記事でも記載した通り、flutterでDialogflowを使うには、dialogflow_flutterパッケージを利用します。 現時点でのdialogflow_flutterのバージョンは1.0.0ですが、こ…