GoogleAssistant
GoogleHome
actionsongoogle
dialogflow

はじめに

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イベントが発生してしまうので、修正が必要になります。それについてはまた今後。