LoginSignup
14
13

More than 5 years have passed since last update.

Dialogflowのeventを使ってみる。

Posted at

はじめに

Dialogflowでは、ユーザーのテキスト入力(キーボード or 音声)に対してintentが反応する仕組みですが、テキスト入力の代わりにeventを発生させて、それに反応するintentを作ることができます。ただ、使い方がわかりにくい(情報が少ない)ので、わかる限りで整理してみました。

今回は、あるIntentが呼び出されたら、それがEventを発生させて、別のIntentが呼び出される、という単純な処理を行います。

IntentでのEventの設定。

最初に、Eventが発生した時に 呼び出される側 の設定です。公式の解説はこちらです。Intentの設定でEventsのところにEventの名前(ここではGood morning)を入れるだけです。

09FBA513-6C5A-4853-BB1F-C0B579755A76.png

こちらのIntentでは、「おはよう」と言うと「おはようございます。今日も良い一日を。」とText Responseを返すようにしました。

6A600ACF-FD6A-4282-BD59-68C277A00ABA.png

Fulfillmentの設定。

今度は、イベントを起こす側の設定です。そのためには、Fulfillmentを設定します。これはWebhookを用いて、intentが呼び出されたことをサーバーへ伝えて、そちらで何らかの処理を行って、結果を受け取ります。公式の解説はこちらこちらをご覧ください。

Fulfillmentは、左のメニューのFullfilmentから設定できます。

46B90F2A-89A6-4AB4-971D-9005E20C3BC7.png

今回は、簡単なテスト用にInline Editorを使うので、下のスライダーを押して Enabled にしてください。

EC017E68-CA40-4C91-A965-D0EAD53A6443.png

これで、index.js 内のスクリプトを編集できるようになります。すでにサンプルコードが書いてありますが、長くて読むのが大変なので、公式のこちらにあるシンプルなコードを基にして作ってみました。

index.js
'use strict';

const functions = require('firebase-functions'); 

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
    response.setHeader("Content-Type", "application/json");
    response.send(
     JSON.stringify({
        "followupEvent": {
           "name": "GoodMorning"
        }
     })
    );
   }
);

リクエストに対してJSONを返すだけのスクリプトです。スクリプトにはfulfillmentでeventを発生させるには、上記の通り JSON内にfollowupEventパラメータを設定する必要があります(詳しくは公式ページの下の方を参照)。これを設定すると、speech, displayText, dataフィールドは無視されるの注意してください。

コードを入力したら、右下のDeployボタンを押せば、実行可能になります。

Eventを呼び出すIntentの設定

イベントを呼び出す側のIntentを作りましょう。「あいさつはじめ」と入れると呼び出されます。

B242E046-7656-42D2-8B7C-B4D766D1943A.png

今までと違って、Intent設定画面の下に、Fulfillmentに関する設定が出てきます。ここで、Use webhookを有効にしてください。

7C7639E9-1DD9-478F-91D4-ABFAC626DB22.png

注意:webhookを有効にするのは、呼び出す側だけです。呼び出される側には不要です。

やってみる

画面右のシミュレータでテストしましょう。”try it now”のところに「あいさつはじめ」と入れると、Eventが起きて、あさのあいさつのIntentが実行されます。

453F6D9C-5D29-470B-9A40-A8A1F3FDA81A.png

下のSHOW JSONボタンを押すと、何が起きたかがわかります。

43248657-D092-424A-83B6-5F4B990048E2.jpeg

E27C0B5E-D472-4723-AB99-29A11B08F143.jpeg

ここで重要なのはmetadataのExectionSequenceで、これを追っていくと、何がEventを発生させて、その結果何のIntentが起こったのかがわかります。

おわりに

とりあえず、もっともシンプルな形でEventを発生させられました。ただし、現状では何のFulfillmentでも必ずGoodMorningイベントが発生してしまうので、修正が必要になります。それについてはまた今後。

14
13
1

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
14
13