クイックスタート: フルフィルメント

このガイドでは、フルフィルメントを使用してエージェントとサービスを統合する方法について説明します。サービスを統合すると、エンドユーザー表現に基づいてアクションを実行し、動的レスポンスをエンドユーザーに返すことができます。

始める前に

フルフィルメントの使用を予定していない場合は、このクイックスタートをスキップできます。

以下の手順では Cloud Functions を使用します。また、基本的な Node.js の知識があることを前提としています。独自のサーバーまたは他の言語を使用してフルフィルメントを作成する場合は、より詳細なフルフィルメントに関するドキュメントをご覧ください。

このガイドを読む前に、次の手順を行ってください。

  1. Dialogflow の基本をご覧ください。
  2. 設定ステップに従ってください。
  3. エージェントを作成するクイックスタート ガイドの手順を実行します。同じエージェントで次の手順を続行します。現在、そのエージェントがない場合は、build-agent-quickstart.zip をダウンロードし、ファイルをインポートします。

インライン エディタ

Dialogflow コンソールには、インライン エディタと呼ばれる組み込みのコードエディタがあります。これを使用してフルフィルメント コードを作成し、Cloud Functions にコードをデプロイできます。Cloud Functions には関連する課金が設けられていますが、毎月の多数の呼び出し回数まで、無料でサービスをご利用いただけます。このインライン エディタは Node.js のみをサポートし、Dialogflow フルフィルメント ライブラリを使用します。

インライン エディタを最初に有効にすると、すべてのエージェントに含まれるデフォルト インテントのデフォルト ハンドラがフルフィルメント コードに事前入力されます。またコードには、デベロッパー定義インテントのハンドラを追加する手順についてのコメントも含まれています。

インライン エディタは、シンプルなフルフィルメント テストとプロトタイピングを目的としています。本番環境のアプリケーションをビルドする準備ができたら、Webhook サービスを作成してください。

インライン エディタでのフルフィルメントの有効化とデプロイ

インライン エディタを使用してデフォルトのフルフィルメント コードを有効化してデプロイするには、次の手順を行います。

  1. 左側のサイドバー メニューで [Fulfillment] をクリックします。
  2. [Inline Editor] を [Enabled] に切り替えます。
  3. 設定手順で課金を有効にしていない場合は、今すぐ課金を有効にするよう求められます。Cloud Functions には関連する課金が設けられていますが、毎月の多数の呼び出し回数まで、無料でサービスをご利用いただけます。
  4. フォームの下部にある [Deploy] をクリックし、デプロイされたことを示すダイアログが表示されるまで待ちます。

フルフィルメントを必要とするインテントごとに、そのインテントのフルフィルメントを有効にする必要があります。Welcome Intent のフルフィルメントを有効にするには次の手順を行います。

  1. 左側のサイドバー メニューで [Intents] をクリックします。
  2. [Default Welcome Intent] をクリックします。
  3. [Fulfillment] セクションまで下にスクロールし、[Enable webhook call for this intent] をオンにします。

  4. [Save] ボタンをクリックし、[Agent Training] ダイアログにトレーニングが完了したことが示されるまで待ちます。

これで、シミュレータでフルフィルメントをテストできるようになりました。シミュレータに Hi を入力すると、Welcome to my agent! というレスポンスが返ってきます。このレスポンスは、この手順でデプロイしたフルフィルメント Webhook から送信されたものです。特に、レスポンスは次のコードから返されています。

function welcome(agent) {
  agent.add(`Welcome to my agent!`);
}

カスタム フルフィルメント ハンドラを作成する

上のステップでは、デフォルトのインライン エディタコードで指定されたハンドラを使用しています。カスタム ハンドラを作成するには、次の手順を行います。

  1. 前のステップで作成した get-agent-name インテントのフルフィルメントを有効にします。
  2. 左側のサイドバー メニューで [Fulfillment] をクリックし、インライン エディタでコードを調べます。
  3. 次に示す行を探します。

    exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
    

    onRequest 関数は、Dialogflow からのすべてのリクエストを処理します。この関数の本体では特定のハンドラ関数が定義されています。これらのハンドラ関数は、関連するインテントが一致したときに呼び出されます。たとえば、前のセクションで使用されている関数は function welcome(agent) です。

  4. 既存のハンドラの下で、get-agent-name インテントに次の関数を追加します。

    function getAgentNameHandler(agent) {
      agent.add('From fulfillment: My name is Dialogflow!');
    }
    
  5. ハンドラ関数定義の下に、intentMap.set() 呼び出しがあります。これらの呼び出しでは、特定のハンドラがインテントに名前で関連付けられます。たとえば、intentMap.set('Default Welcome Intent', welcome)welcome ハンドラを「Default Welcome Intent」という名前のインテントに関連付けます。

  6. 既存の intentMap.set 呼び出しの下で、get-agent-name インテント用に次の行を追加します。

    intentMap.set('get-agent-name', getAgentNameHandler);
    
  7. フォームの下部にある [Deploy] をクリックします。

  8. シミュレータに、What's your name? を入力します。From fulfillment: My name is Dialogflow! というレスポンスが新しいハンドラから送信されます。

パラメータ値へのアクセス

前のステップでは、set-language インテントを作成して、人間の言語とプログラミング言語を特定しました。このインテントでは、language および language-programming パラメータが使用されています。このセクションでは、フルフィルメント ハンドラでこれらのパラメータの値にアクセスします。

ハンドラを追加するには次の手順に従います。

  1. set-language インテントのフルフィルメントを有効にします。
  2. 左側のサイドバー メニューで [Fulfillment] をクリックします。
  3. 上の手順と同様に、次のハンドラと intentMap 呼び出しを追加します。

    function languageHandler(agent) {
        const language = agent.parameters.language;
        const programmingLanguage = agent.parameters['language-programming'];
        if (language) {
            agent.add(`From fulfillment: Wow! I didn't know you knew ${language}`);
        } else if (programmingLanguage) {
            agent.add(`From fulfillment: ${programmingLanguage} is cool`);
        } else {
            agent.add(`From fulfillment: What language do you know?`);
        }
    }
    
    intentMap.set('set-language', languageHandler);
    
  4. [デプロイ] をクリックします。

このハンドラは、パラメータ language および language-programming を取得し、それらを変数に格納します。これらの値は agent.parameters 属性から取得されます。この属性は、ユーザーがリクエストで指定するすべてのパラメータの名前と値を含むオブジェクトです。

試してみるには、シミュレータに I know how to speak German と入力します。