Actions on Google

Actions on Googleの手法をご紹介します。

Actions on Googleとは何か

以下の記事は、「Dialogflow入門」を参照しています。

やたらと多い登場人物

Google HomeがいたりGoogle on Actionがあったり、DialogflowがいたりFirebaseがいたりと、とにかくやたら登場人物が多い。


actions on googleの位置づけ

Google Home

いわゆるスマートスピーカーで音声の入出力を取り扱う。 OK Googleや ねぇGoogleでマイクをONにして、受け取った音声をGoogle Assistantに流す。

Google Assistant

受け取った音声を解析してニュースや音楽などを流す。

また、場合によりActions on Googleのサービスを起動する。

Actions on Google

Google Assistantから呼び出せるサービスのこと。

既存のアプリをActions on Googleに対応することでGoogle Assistantを経由して自社サービスやアプリなどを操作出来る様になる。

Dialogflow

言語解析エンジン

音声入力で問題となりやすい自然言語の解析を簡単にやってくれる機能。

これを挟むことで言語解析のややこしいところを大幅に削減できる。

今回はここを紹介します。

Server

Dialogflowから送られてきた解析済みのコマンドをServerで処理する。

ここでよくFirebaseが紹介されるけれど、手っ取り早く無料でServerを立ち上げられるというだけの話で特にサーバーの縛りはなくて、Herokuでもいいし、実業務では多くの場合、既に稼働しているサーバーに接続する形になるはず。

Dialogflowとの間はシンプルなJSONでのやり取りとなるため、既存サーバーと直接つなぐには既存サーバー側に対応したAPIを用意する必要がある。

APIが用意されていないサービスと繋ぐために、スクレイピングや変換するサーバーを立てることもある。

関連リンク

以下の情報が詳しい。

Dialogflow入門

Dialogflow

Dialogflowで最初のアプリを構築する

Googleアシスタントのアプリは自然な会話的であり、アシスタントの機能をあなた自身の会話で拡張して、予定の予約、ゲームのプレイ、最新のニュースに関するアップデートの取得などをユーザができるようにします。

このガイドでは、ユーザーに好きな色と幸運な番号を入力することによってユーザーの愚かな名前を返すGoogleアシスタント向けのシンプルな Silly Name Maker アプリを構築する方法を説明します。また、Actions on GoogleとGoogleアシスタントの基本概念と、Dialogflowを使用してこれらのプラットフォーム向けに構築する方法についても学習します。

アプリアーキテクチャ

Googleアシスタントの一般的なアプリは、次の3つの主要な部分から構成されています。

アクションと呼び出し

Actions on Googleは、ユーザーが「乗車予約」や「ゲームをする」などのアクションベースのコマンドを通じて、アシスタントのアプリを呼び出すための方法を定義します。すべてのアプリは、ユーザが名前でアプリを呼び出せるようにするメインアクションを定義する必要があります。さらに、すべてのアプリは、異なるエントリポイントを通じてアプリに深くリンクする追加のアクションを定義できます。

このチュートリアルでは、デフォルトのアクションを1つだけ定義します。これにより、ユーザーは「Ok Google, talk to Silly Name Maker」のような言葉でアプリを呼び出すことができます。

ユーザーがアクションを使ってアプリケーションを呼び出す方法を定義したら、次にアクションをActions on Googleに公開します。ユーザーは、AndroidのGoogleアプリまたはiOSのアシスタントアプリ内のアシスタントディレクトリからアクションを発見できます。

会話

これはアプリのUIであり、Actions on Googleによって呼び出された後に、ユーザがアプリとどのようにやり取りするかを定義します。Dialogflowを使用して、会話の文法(ユーザーがあなたのアプリに言うことができるもの)を定義します。

さらに、Dialogflowは組み込みの機械学習と自然言語の理解を提供するので、完全に網羅するように文法を定義する必要はありません。Dialogflowでユーザーの入力から型付きパラメータをパースする方法を定義することができ、ユーザーが何を言ったかをさらに簡単に理解させます。Dialogflowで会話の文法を構築した後は、_フルフィルメント_でユーザーにどのように応答するかを定義します。

このチュートリアルでは、ユーザーが好きな色と幸運な数字を提供する方法を定義する非常に単純な文法を作成します。

フルフィルメント

Dialogflowは、自然言語を理解し、ユーザーの入力から必要なデータ解析の大部分を処理します。ただし、ユーザーとの会話では、通常、要求された処理を完了してユーザに応答するためのビジネスロジックを実行する必要があります。Dialogflow WebHookを実装するウェブサービス(フルフィルメントと呼ばれる)でこれを行います。これは、アプリをDialogflowでアシスタントに統合する方法を定義するJSONベースのプロトコルです。

ユーザーが何かを言うと、生のテキストと、その入力からパースされたパラメーターのセットを受け取ります。このデータを使用してレスポンスを返し、会話を前に進めます。ユーザーとの会話が終わったら、要求されたアクションが達成されます。

このチュートリアルでは、Dialogflowがユーザーの入力から色と数値を解析し、フルフィルメントでこのデータを受け取り、ユーザーの愚かな名前で応答する方法を定義します。

Conversation WebHook vs Dialogflow WebHook
会話のWebhookは、Googleアシスタントのための会話をどのように作成するかを定義します。Dialogflowは、アシスタントのConversationWebhookを実装して拡張し、独自の追加機能を追加します。Dialogflowを使用してアプリを構築すると、DialogflowのWebHook形式で実際に通信し、次にConversation WebHook形式でアシスタントと通信します。私たちのNode.jsクライアントライブラリを使用することが推奨されています。なぜなら、これらの面倒な詳細が隠蔽され、生のJSONを解析したり構築したりする必要がないからです。

会話をデザインする

アプリの作成を始める前に、サンプルのダイアログ(対話)を書き出して、常に会話の構造がわかるようにしておくべきです。これらのダイアログは、最終的にアプリの構築を始める際に良い参照ポイントになります。Silly Name Makerアプリでは、以下に説明する簡単なダイアログをいくつか用意しました:

正常パス
アプリ: Hi! Welcome to Silly Name Maker! Let’s get started. What is your lucky number?
ユーザ: 5
アプリ: What is your favorite color?
ユーザ: Yellow
アプリ: Alright, your silly name is Yellow 5! I hope you like it. See you next time.
ユーザが間違った入力を与えた場合
アプリ: Hi! Welcome to Silly Name Maker! Let’s get started. What is your lucky number?
ユーザ: Dog
アプリ: Hmm that doesn’t sound like an number to me. What’s your lucky number again?”
ユーザ: 22
アプリ: What is your favorite color?
ユーザ: Blue
アプリ: Alright, your silly name is Blue 22! I hope you like it. See you next time.
会話デザインのヒント
この例では、あなた自身のアプリのために書くべきダイアログのいくつかを示しています。作成するダイアログの例については、Design Walkthroughを参照してください。

アクションプロジェクトとDialogflowエージェントを作成する

Actions on Google向けに開発を行うためには、アクションプロジェクトとDialogflowエージェントを作成する必要があります。アクションプロジェクトでは、アクションを登録したり、承認プロセスを通じてアプリを管理したり、アプリの統計情報を表示したりすることができます。Dialogflowエージェントは、ユーザーがあなたのアプリに言うことができるものと、アプリがユーザーの入力をどのように処理するかを定義します。

プロジェクトとエージェントを作成するには:

  1. Actions on Google Developer Consoleに移動します。
  2. Add Projectをクリックし、プロジェクト名としてSillyNameMakerを入力して、Create Projectをクリックします。
  3. Overview画面で、Dialogflowカード上のBUILDをクリックし、次にCREATE ACTIONS ON Dialogflowをクリックしてアクションの構築を開始します。
  4. Dialogflowコンソールが表示され、エージェントに自動的に情報が入力されます。Saveをクリックしてエージェントを保存します。
  5. あなたのエージェントは、後でビルドするいくつかのフルフィルメントロジックを呼び出して、ユーザーの愚かな名前で応答を返します。エージェントのフルフィルメントを有効にすると、後で必要となるUIフィールドがいくつか用意されます。以下を行いましょう。
    • Fulfillmentメニュー項目をクリックします。
    • Disabledスライダを右に移動してEnabledにします。
    • ダミーのURL(https://silly.name.maker)を入力します。 フルフィルメントをビルドおよびデプロイする際にこのURLを更新します。
  6. Saveをクリックします。

アクションと呼び出しを定義する

Dialogflowエージェントを作成すると、Default Welcome intentが自動的に作成されます。このインテントは、会話のメインエントリポイントまたはアプリのメインアクションを表します。Actions on Googleがアプリを呼び出す方法を知るために、すべてのアプリで、このメインアクションが定義されている必要があります。このインテントには、次の特徴があります。

  • インテントのEventsセクションには、WELCOMEイベントが指定されています。これは、このインテントがアプリのデフォルトエントリポイントであることを示しています。各エージェントは、このWELCOMEイベントを宣言する唯一のインテントを持つ必要があります。「Ok Google, talk to Silly Name Maker」のように、ユーザーがアプリを名前で呼び出す際に、Googleアシスタントはアプリを作動させるためにこのイベントを使用します。。 Actionフィールドには、input.welcome名を指定します。インテントが作動されると、このアクション名がフルフィルメントに送信されることで、実行するタスクにアクションの名前を関連付けできます。このウェルカムインテントはフルフィルメントを使用する必要はないので(静的なレスポンスで応答します)、使用されていないためそのまま残すことができます。 注: Dialogflowアクションは、Actions on Googleのアクションとは異なる意味を持ちます。したがって、2つを同じものとして混同しないでください。Dialogflowアクションは、処理するデータを定義するインテントのコンポーネントです。Actions on Googleのアクションは、あなたのアプリへのエントリーポイントです。
  • レスポンスセクションには、デフォルトの静的テキストレスポンスがあります。これにより、フルフィルメントを呼び出さずにユーザーに応答することができます。既定のウェルカムインテントには、あなた自身で追加するために削除すべきな事前入力済みのレスポンスが含まれています。 Dialogflowレスポンスとフルフィルメントレスポンス

    Dialogflowを使用すると、フルフィルメントコードを記述せずにDialogflow内で直接レスポンスを定義できるため、フルフィルメントを一切持たないアプリを作成することができます。これは、生成するロジックを必要としない単純なメッセージに便利です。しかし、あなたのインテントのほとんどは、おそらくフルフィルメントを使用してレスポンスを返すでしょう。

    Dialogflowでレスポンス機能を使用する別の便利な方法は、開発中に「プレースホルダ」レスポンスを返すことです。これにより、定義した文法でインテントが適切に作動されるようにすることができます。

    あなたがウェルカムインテントについて少し知ることができたので、私たちのニーズに合うように修正しましょう。

左のナビゲーションメニューでIntentsをクリックし、Default Welcome Intentを選択します。 Responseセクションで、Text responseのフィールドにある入力済みのレスポンスを右上のtrash canアイコンをクリックして削除します。 ADD MESSAGE CONTENT > Text responseをクリックし、代わりに次のレスポンスを指定してSaveをクリックします。 Hi! Welcome to Silly Name Maker! Let's get started. What is your lucky number?

Saveをクリックします。

今、ユーザーがあなたのアプリを呼び出すと、彼らはあなたのアプリの体験が始まり、次に言うことを知ります。一般的に、あなたのレスポンスは、次に何を言うのか、そして会話の文法を超えないことをユーザに案内すべきです。これについては、次のセクションでさらに定義します。

会話の文法を定義する

Dialogflowインテントは、会話の文法と、ユーザーが文法の特定のフレーズを話すときに実行するタスクを定義します。Dialogflowには自然言語理解(NLU)エンジンが組み込まれているため、フレーズを定義するときに網羅する必要はありません。Dialogflowは、あなたが提供するフレーズを自動的に展開し、より多くのバリエーションを理解します。

愚かな名前を生成するために、ユーザーが幸運な数字と好きな色を提供するために必要となる方法を定義するインテントを作成します。

左のナビゲーションで、+アイコンをIntentsメニュー項目でクリックします。 Intent nameフィールドにmake_nameと入力します。 User saysフィールドにMy lucky number is 23と入力してEnterキーを押します。 番号23をクリックして強調表示し、表示されるドロップダウンメニューで@sys.numberエンティティを割り当てます。Dialogflowは、これを自動的に@sys.ageなどの別のエンティティに自動的に割り当てます。いつでも他のエンティティを推測するように変更することができます。

注: ユーザーの発言の一部分をエンティティに割り当てることによって、Dialogflowはユーザー入力からパラメーターを抽出し、パラメーターを検証し、それを変数としてフルフィルメントに提供することができます。エンティティを割り当てなければ、自分で入力を解析し、必要なパラメータを見つける必要があるでしょう。また、Actionsセクションでは、パラメータがnumberパラメータに対して自動的に作成されていることにも注意してください。後でこれを修正します。

ユーザーの発言のフレーズのバリエーションを増やし、そのフレーズ内の任意の数字を@sys.numberエンティティに割り当てます。 23

The luckiest number I have is 12.

Actionsセクションで、numberパラメータのREQUIREDチェックボックスをオンにします。これはDialogflowに、パラメータがユーザによって適切に提供されるまでインテントを作動させないように指示します。 パラメータのDefault promptsをクリックして、再確認のフレーズを入力します。このフレーズは、Dialogflowがユーザー入力の数字を検出するまで繰り返しユーザーに話されます。

In the Actions section, enter a new parameter with the following information: Actionsセクションで、次の情報を含む新しいパラメータを入力します。 Required - チェックボックスをオンにします Parameter name - color Entity - @sys.color Value - $color Prompts - What is your favorite color? 注意: この追加のパラメータは、Dialogflowに組み込まれている「slot-filling」機能を使用しています。これにより、それぞれに対してインテントを作る必要なしに、そして一つのフレーズですべての要求さえる入力をユーザに話させる必要なしに、ユーザから追加の入力パラメータを得ることができます。また、Slot-fillingにより、ユーザーが必要なすべてのパラメーターを提供したレスポンスまでエージェントが入力を処理しないように、パラメーターを必須として設定することができます。

名前にmake_nameを入力し、SAVEをクリックします。

Fulfillmentセクションで、Use webhookチェックボックスをオンにします。Dialogflowのレスポンス機能を使用する代わりに、ユーザーへのレスポンスを生成するためにDialogflowがフルフィルメントを呼び出すように指示します。 Actions on Googleセクションで、End conversationチェックボックスをオンにします。これにより、Dialogflowは、フルフィルメントからユーザーにレスポンスが返った後に、Googleアシスタントに対して制御を返すことを指示します。 インテント全体を保存するために、SAVEをクリックします。 これで終わりです!Dialogflowのインテントを使って会話の文法を正しく宣言しました。また、Dialogflowの組み込みレスポンス機能を使用して、ユーザーがアプリを呼び出すときに静的なレスポンスを返すようにしました。そして、フルフィルメントを使用してレスポンスを返すインテントを作成しました。今、フルフィルメントを構築する必要があります。

フルフィルメントの構築

フルフィルメントのロジック向けに、FirebaseにCloud Functionを構築します。あなたのフルフィルメントは、Dialogflowが返す解析済みのユーザー入力を受け取り、ユーザーの愚かな名前で応答します。

Node.jsをダウンロードし、インストールします。 次のコマンドを使用して、Firebase CLIを設定し初期化します。 注: 次のコマンドがEACCESエラーで失敗した場合は、npmパーミッションを変更する必要があります。

npm install -g firebase-tools

次のコマンドを使用して、Googleアカウントでfirebaseツールを認証します。 firebase login sillynamemakerというディレクトリを作成し、次のコマンドでディレクトリを初期化します。 mkdir sillynamemaker cd sillynamemaker firebase init あなたは以下の画面を見るはずです。

Which Firebase CLI features do you want to setup for this folder? Press Space to select features, then Enter to confirm your choices. ◯ Database: Deploy Firebase Realtime Database Rules ❯◯ Functions: Configure and deploy Cloud Functions ◯ Hosting: Configure and deploy Firebase Hosting sites インタラクティブなCLIメニューからFunctionsを選択し、Enterキーを押します。 アクションプロジェクトIDを画面から選択します(文字列にはsilly-name-makerが必要です)。Dialogflowエージェントの設定でプロジェクトIDを見つけることもできます。 firebase initコマンドは、package.jsonとindex.jsの2つのファイルを作成しました。それらが以下の例のようになるように編集します。 sillynamemaker/functions/package.json このファイルは、あなたのフルフィルメントのパッケージ依存関係を宣言します(Actions on GoogleおよびFirebaseのCloud Function Node.jsクライアントライブラリを含む)。

 {
   "name": "silly-name-maker",
   "description": "Find out your silly name!",
   "version": "0.0.1",
   "author": "Google Inc.",
   "engines": {
     "node": "~4.2"
   },
   "dependencies": {
     "actions-on-google": "^1.0.0",
     "firebase-admin": "^4.2.1",
     "firebase-functions": "^0.5.7"
   }
 }
sillynamemaker/functions/index.js

このファイルは、あなたのフルフィルメントのロジックを定義します。ここで、あなたが知る必要があるいくつかの主要なことがあります:

Dialogflowのインテントが作動されると、インテントのアクション名(インテントのアクション領域で宣言された)が、フルフィルメントへのリクエストにて提供されます。このアクション名を使用して、実行するロジックを決定します。 フルフィルメントへのすべての要求の中で、Dialogflowがユーザー入力からパラメーターを解析した場合、名前によってパラメーターにアクセスできます。ここでは、後でそれらのパラメータにアクセスするために、パラメータの名前を宣言します。 この関数は、愚かな名前を生成することによってアクションを達成します。その関数は、make_nameインテントが作動されるたびに呼び出されます。ユーザー入力からのパラメータを使用して、名前を生成します。 Node.jsクライアントライブラリのアクションマップでは、インテント名を関数にマップすることで、フルフィルメントがリクエストを受け取ると、そのアクション名に基づいて関数を自動的に呼び出すことができます。前に宣言したアクション名の変数を使用し、その名前をmake_name関数にマップします。

 'use strict';

 process.env.DEBUG = 'actions-on-google:*';
 const App = require('actions-on-google').DialogflowApp;
 const functions = require('firebase-functions');


 // a. the action name from the make_name Dialogflow intent
 const NAME_ACTION = 'make_name';
 // b. the parameters that are parsed from the make_name intent
 const COLOR_ARGUMENT = 'color';
 const NUMBER_ARGUMENT = 'number';


 exports.sillyNameMaker = functions.https.onRequest((request, response) => {
   const app = new App({request, response});
   console.log('Request headers: ' + JSON.stringify(request.headers));
   console.log('Request body: ' + JSON.stringify(request.body));


 // c. The function that generates the silly name
   function makeName (app) {
     let number = app.getArgument(NUMBER_ARGUMENT);
     let color = app.getArgument(COLOR_ARGUMENT);
     app.tell('Alright, your silly name is ' +
       color + ' ' + number +
       '! I hope you like it. See you next time.');
   }
   // d. build an action map, which maps intent names to functions
   let actionMap = new Map();
   actionMap.set(NAME_ACTION, makeName);


 app.handleRequest(actionMap);
 });

sillynamemaker/functionsディレクトリから、次のコマンドを実行してプロジェクトに依存しているものを取得します。 npm install フルフィルメントをデプロイする sillynamemaker/functionsディレクトリから、次のコマンドを使用してフルフィルメントをクラウドにデプロイします。 firebase deploy --only functions デプロイにはしばらく時間がかかります。完了すると、次のような出力が表示されます。Function URLをDialogflowに入力する必要があります。

✔ Deploy complete!

Project Console: https://console.firebase.google.com/project/sillynamemaker-abb1d/overview Function URL (sillyNameMaker): https://us-central1-sillynamemaker-abb1d.cloudfunctions.net/sillyNameMaker 注: Cloud Functionのデプロイが完了していたとしても、エンドポイントURLが実際に新しいコードを使用するまでには、数分かかる場合があります。

Dialogflowの左側のナビゲーションで、Fulfillmentメニュー項目をクリックします。

URLフィールドに関数のURLを入力し、Saveをクリックします。

アプリをプレビューする

あなたのフルフィルメントがデプロイされ、Dialogflowで適切に設定されましたので、アクションシミュレータでアプリをプレビューできます。

アプリをプレビューするには:

  1. GoogleアカウントのActivity controlsページで、Web & App Activity、Device Information、Voice & Audio Activityの権限をオンにします。これは、アクションシミュレータを使用するために必要であり、ハードウェアデバイスなしでWeb上でアクションをテストできるようになります。
  2. Dialogflowの左側のナビゲーションでIntegrationsをクリックし、Actions on Googleカード上のスライダーバーを移動します。 Actions on Googleカードをクリックして統合画面を表示し、TESTをクリックします。Dialogflowは、エージェントをサーバーにアップロードします。そして、アクションシミュレータでテストすることができます。
    注: TESTボタンが表示されない場合は、AUTHORIZEボタンを最初にクリックして、DialogflowにGoogleアカウントとアクションプロジェクトへのアクセス権を付与する必要があります。
    
  3. 統合画面のTest your Assistant appセクションで、Actions Simulatorリンクをクリックして、アクションシミュレータ用の新しいブラウザを開きます。
    注: アクションシミュレータのスプラッシュ画面が表示されている場合は、StartをクリックしてGoogleアカウントで認証します。
    
  4. アクションシミュレータで、アプリのテストのために、シミュレータの入力領域にtalk to my test appと入力します。
  5. あなたの愚かな名前を受け取るように求められたら、番号と色を入力します。

次のステップ

このアプリは、開発に使用するアカウントでのみテストできます。自分のアプリを作成してすべてのユーザーが利用できるようにするには、レビューチームの承認のためにアプリを提出する必要があります。

Dialogflowを使用したアシスタントのアプリを構築する方法の詳細については、Dialogflow開発者ガイドを参照してください。

DialogAppクラス

DialogAppクラスとは何か

Amazonの「Alexa Skill SDK」における「AWS Lambda」に相当する Googleの「Actions on Google SDK」における最上位アプリケーションは、 「Google Firebase」と呼ばれるNode.jsアプリです。 もちろん 「AWS Lambda」もNode.jsアプリです。

同じNode.jsアプリですが、それぞれ利用するクラスが異なります。 「Actions on Google SDK」には、以下の2種類のクラスがあります。

  1. DialogflowAppクラス
  2. ActionsSdkAppクラス

上記の違いは、自然言語処理として①は「Dialogflow」を使うことを前提に しているのに対し、②は自前で自然言語処理を行う場合に使用するようです。

我々は、自前で自然言語処理を行うことはあり得ませんので、当然、 「Dialogflow」を使うことを前提にした①を使うことになります。

①のクラスが提供するメソッドで、よく使うのは以下の2メソッドです。

  1. Tellメソッド:発話を行い、会話セッションを終了する
  2. Askメソッド:発話を行い、応答を要求することで会話セッションを継続する

この辺までは、「AWS Lambda」と全く同じで簡単です。

DialogflowAppクラスのメソッド

Askメソッド

この辺までは、「AWS Lambda」と全く同じで簡単です。

const app = new DialogflowApp({request: request, response: response});
const WELCOME_INTENT = 'input.welcome';
const NUMBER_INTENT = 'input.number';

function welcomeIntent (app) {
  app.ask('Welcome to action snippets! Say a number.',
    ['Say any number', 'Pick a number', 'We can stop here. See you soon.']);
}

function numberIntent (app) {
  const number = app.getArgument(NUMBER_ARGUMENT);
  app.tell('You said ' + number);
}

const actionMap = new Map();
actionMap.set(WELCOME_INTENT, welcomeIntent);
actionMap.set(NUMBER_INTENT, numberIntent);
app.handleRequest(actionMap);


Figure 1: WICED Smart Tag

DialogAppクラスを使用したサーバアプリの例

Dialogflowで最初のアプリを構築する

Googleアシスタントのアプリは自然な会話的であり、アシスタントの機能をあなた自身の会話で拡張して、予定の予約、ゲームのプレイ、最新のニュースに関するアップデートの取得などをユーザができるようにします。

このガイドでは、ユーザーに好きな色と幸運な番号を入力することによってユーザーの愚かな名前を返すGoogleアシスタント向けのシンプルな Silly Name Maker アプリを構築する方法を説明します。また、Actions on GoogleとGoogleアシスタントの基本概念と、Dialogflowを使用してこれらのプラットフォーム向けに構築する方法についても学習します。

'use strict';

process.env.DEBUG = 'actions-on-google:*';
const App = require('actions-on-google').DialogflowApp;
const functions = require('firebase-functions');

// Intentのアクション名を指定
const NAME_ACTION = 'confirm_delay';

// パラメータのPARAMETER NAMEを指定
const ROUTE_ARGUMENT = 'train-route';

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
    const app = new App({request, response});

    function confirmDelay (app) {
        // 路線名を取得する
        let route = app.getArgument(ROUTE_ARGUMENT);

        let isDelay = false;

        /* 指定した路線の電車遅延情報を取得する処理をここに書く */

        if (isDelay) {
            app.tell(route + 'で遅延発生中です。');
        } else {            
            app.tell('現在' + route + 'では遅延は発生していません。');
        }
    }
    let actionMap = new Map();
    actionMap.set(NAME_ACTION, confirmDelay);

    app.handleRequest(actionMap);
});


'use strict';

process.env.DEBUG = 'actions-on-google:*';
const App = require( 'actions-on-google')。DialogflowApp;
const functions = require( 'firebase-functions');


// a。make_name Dialogflowインテントからのアクション名
const NAME_ACTION = 'make_name';
// b。make_nameインテントから解析されるパラメータ 
const COLOR_ARGUMENT = 'color';
const NUMBER_ARGUMENT = 'number';


exports.sillyNameMaker = functions.https.onRequest((request、response)=> {
	const app =新しいアプリケーション({request、response});
	console.log( 'リクエストヘッダー:' + JSON.stringify(request.headers));
	console.log( 'リクエスト本文:' + JSON.stringify(request.body));

	// c。愚かな名前を生成する関数
	関数makeName(app){
	let = app.getArgument(NUMBER_ARGUMENT);
	let color = app.getArgument(COLOR_ARGUMENT);
	app.tell( 'さて、あなたの愚かな名前は' + 
	色+ '' +数字+
		'!気に入ってくれるといいな。次回会いましょう。 ');
	}
	// d。インテント名を関数にマップするアクションマップを作成する
	let actionMap = new Map();
	actionMap.set(NAME_ACTION、makeName);

	app.handleRequest(actionMap);
});

Dialogflow for Android

Dialogflow Android SDKのソースコード、サンプルコード、ドキュメンテーションはすべてこちらのリポジトリから確認することができます。

AIDataService

最も実装の自由度の高いライブラリ。文字列をAIDataServiceに投げると適切なIntentの結果を返してくれる

AIService

音声の録音をするライブラリ。録音が終了すると自動的に音声をDialogflowに飛ばし、適切なIntentの結果を返してくれる。Androidのマイクを扱う時と同じ要領で扱える。start stop メソッドなどがある。

AIButton

最も実装が少ないライブラリ。Buttonを扱う時と同じ要領で扱え、自動的に音声をDialogflowに飛ばしてくれる。

Dialogflowを使用したAndroidアプリの例

以下の記事を参照しています。

DroidKaigi2018 Dialogflow for Android

android-dialogflow-chatbot-sample

Dialogflowを使用したAndroidアプリの例



森の小径2