このガイドでは、フルフィルメントを使用してエージェントとサービスを統合する方法について説明します。サービスを統合すると、エンドユーザー表現に基づいてアクションを実行し、動的レスポンスをエンドユーザーに返すことができます。
始める前に
フルフィルメントの使用を予定していない場合は、このクイックスタートをスキップできます。
以下の手順では Cloud Functions を使用します。また、基本的な Node.js の知識があることを前提としています。独自のサーバーまたは他の言語を使用してフルフィルメントを作成する場合は、より詳細なフルフィルメントに関するドキュメントをご覧ください。
このガイドを読む前に、次の手順を行ってください。
- Dialogflow の基本をご覧ください。
- 手順に沿って設定してください。
- エージェントを作成するクイックスタート ガイドの手順を実行します。同じエージェントで次の手順を続行します。現在、そのエージェントがない場合は、
build-agent-quickstart.zip
をダウンロードし、ファイルをインポートします。
インライン エディタ
Dialogflow コンソールには、インライン エディタと呼ばれる組み込みのコードエディタがあります。これを使用してフルフィルメント コードを作成し、Cloud Functions にコードをデプロイできます。Cloud Functions には関連する課金が設けられていますが、毎月の多数の呼び出し回数まで、無料でサービスをご利用いただけます。それでも、有効な請求先アカウントを登録して提供する必要があります。解約はいつでも可能です。
インライン エディタを最初に有効にすると、すべてのエージェントに含まれるデフォルト インテントのデフォルト ハンドラが Node.js フルフィルメント コードに事前入力されます。またコードには、デベロッパー定義インテントのハンドラを追加する手順についてのコメントも含まれています。
インライン エディタは、シンプルなフルフィルメント テストとプロトタイピングを目的としています。本番環境のアプリケーションをビルドする準備ができたら、Webhook サービスを作成してください。
インライン エディタでのフルフィルメントの有効化とデプロイ
インライン エディタを使用してデフォルトのフルフィルメント コードを有効化してデプロイするには、次の手順を行います。
- 左側のサイドバー メニューで [Fulfillment] をクリックします。
- [Inline Editor] を [Enabled] に切り替えます。
- 設定手順で課金を有効にしていない場合は、今すぐ課金を有効にするよう求められます。Cloud Functions には関連する課金が設けられていますが、毎月の多数の呼び出し回数まで、無料でサービスをご利用いただけます。それでも、請求先アカウントを登録して提供する必要があります。解約はいつでも可能です。
- フォームの下部にある [Deploy] をクリックし、デプロイされたことを示すダイアログが表示されるまで待ちます。
フルフィルメントを必要とするインテントごとに、そのインテントのフルフィルメントを有効にする必要があります。Welcome Intent のフルフィルメントを有効にするには次の手順を行います。
- 左側のサイドバー メニューで [Intents] をクリックします。
- [Default Welcome Intent] をクリックします。
[Fulfillment] セクションまで下にスクロールし、[Enable webhook call for this intent] をオンにします。
[Save] ボタンをクリックし、[Agent Training] ダイアログにトレーニングが完了したことが示されるまで待ちます。
これで、シミュレータでフルフィルメントをテストできるようになりました。シミュレータに Hi
を入力すると、Welcome to my agent!
というレスポンスが返ってきます。このレスポンスは、この手順でデプロイしたフルフィルメント Webhook から送信されたものです。特に、レスポンスは次のコードから返されています。
function welcome(agent) { agent.add(`Welcome to my agent!`); }
カスタム フルフィルメント ハンドラを作成する
上のステップでは、デフォルトのインライン エディタコードで指定されたハンドラを使用しています。カスタム ハンドラを作成するには、次の手順を行います。
- 前のステップで作成した
get-agent-name
インテントのフルフィルメントを有効にします。 - 左側のサイドバー メニューで [Fulfillment] をクリックし、インライン エディタでコードを調べます。
次に示す行を探します。
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
onRequest
関数は、Dialogflow からのすべてのリクエストを処理します。この関数の本体では特定のハンドラ関数が定義されています。これらのハンドラ関数は、関連するインテントが一致したときに呼び出されます。たとえば、前のセクションで使用されている関数はfunction welcome(agent)
です。既存のハンドラの下で、
get-agent-name
インテントに次の関数を追加します。function getAgentNameHandler(agent) { agent.add('From fulfillment: My name is Dialogflow!'); }
ハンドラ関数定義の下に、
intentMap.set()
呼び出しがあります。これらの呼び出しでは、特定のハンドラがインテントに名前で関連付けられます。たとえば、intentMap.set('Default Welcome Intent', welcome)
はwelcome
ハンドラを「Default Welcome Intent
」という名前のインテントに関連付けます。既存の
intentMap.set
呼び出しの下で、get-agent-name
インテント用に次の行を追加します。intentMap.set('get-agent-name', getAgentNameHandler);
フォームの下部にある [Deploy] をクリックします。
シミュレータに、
What's your name?
を入力します。From fulfillment: My name is Dialogflow!
というレスポンスが新しいハンドラから送信されます。
パラメータ値へのアクセス
前のステップでは、set-language
インテントを作成して、人間の言語とプログラミング言語を特定しました。このインテントでは、language
および language-programming
パラメータが使用されています。このセクションでは、フルフィルメント ハンドラでこれらのパラメータの値にアクセスします。
ハンドラを追加するには次の手順に従います。
set-language
インテントのフルフィルメントを有効にします。- 左側のサイドバー メニューで [Fulfillment] をクリックします。
上の手順と同様に、次のハンドラと
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);
[デプロイ] をクリックします。
このハンドラは、パラメータ language
および language-programming
を取得し、それらを変数に格納します。これらの値は agent.parameters
属性から取得されます。この属性は、ユーザーがリクエストで指定するすべてのパラメータの名前と値を含むオブジェクトです。
試してみるには、シミュレータに I know how to speak German
と入力します。