LoginSignup
3
3

More than 1 year has passed since last update.

DialogflowのサンプルBotからエージェントのビルドとフルフィルメントのデプロイを学ぶ

Last updated at Posted at 2021-06-21

Bot作成のために、GoogleのDialogflowを使ってみました。
今回、DialogflowのQuickstartドキュメントを元に、Bot作成のさわりだけを記事にまとめました。

環境

  • Dialogflow ES

Dialogflowには、Dialogflow CX(Advanced)と Dialogflow ES(Standard)の 2 つのエディションがありますが、この記事で取り上げるのはESの方だけです。

対象

  • Dialogflowというサービスの触りだけさらっと知りたい方
  • DialogflowからAPIを利用する方法

GCPから利用する方法や、プロダクションで利用したい方向けの解説はありません。

Dialogflowとは?

DialogflowはざっくりGoogle製のBot等が作れるサービス。

Quickstarts

クイックスタート

Setup

設定

クイックスタートを動作させるだけなら設定は必要ありません。
Dialogflowのコンソールにログインしてエージェントを作成すれば良いです。

Dialogflowのコンソールからエージェントを作成すると、自動的にGCP(Google Cloud Platform)のプロジェクトが作成されます。

Dialogflowコンソールで作成したプロジェクトをGCPコンソールで確認するには、作成したエージェントの設定(歯車マーク)から、General→Project IDを確認して、そのProject IDのリンクからGCPのプロジェクトを開きます。
スクリーンショット 2021-06-20 15.49.46.png

フルフィルメントで APIを利用する場合の注意点は、GCP(Google Cloud Platform)の無料枠を使い切っている場合、Dialogflowのコンソールで自動で作成されるGCPのプロジェクトの課金設定をする必要があります。

Dialogflowプロジェクトに課金を有効にする

GCP(Google Cloud Platform)のコンソールにログインします。

フルフィルメントからInline Editorを選択
スクリーンショット 2021-06-20 21.45.28.png

OPEN CLOUD CONSOLEを選択
スクリーンショット 2021-06-20 21.45.40.png

請求先アカウントを選択
スクリーンショット 2021-06-20 21.46.34.png

SET ACCOUNT を押下
スクリーンショット 2021-06-20 21.46.45.png

プロジェクトのダッシュボードに Billingが表示されます
スクリーンショット 2021-06-20 21.47.25.png

Build an agent

エージェントの作成

上記の手順より、エージェントを作成します。
その後、サンプルファイルをインポートします。

Intents

インテンツ

サンプルファイルをインポートすると、デフォルトWelcomeインテントが下記のように設定されます。

スクリーンショット 2021-06-21 8.00.39.png

サンプルインテントのテスト

Dialogflowコンソールの右側のシミュレータに入力すると、エージェントのテストができます。

シミュレータに入力すると、"Default Welcome Intent"の "Responses" のリストから自動で選択されてレスポンスが返されます。

スクリーンショット 2021-06-21 8.09.44.png

APIレスポンス

"DIAGNOSTIC INFO"を押下すると、APIレスポンスを確認できます。

スクリーンショット 2021-06-21 8.08.58.png

Fulfillment

フルフィルメント。

プログラムを使ってレスポンスを返すような処理を設定できます。
GCPのプロジェクトからAPIを作成しても良いのですが、今回はAPIを使った時の動きをさわりだけ確認するために、インラインエディタを利用します。

Inline Editor

インラインエディタを使って簡単にフルフィルメントを作成できます。
インラインエディタのプログラムはNodeのみのサポートです。
ライブラリにDialogflow フルフィルメント ライブラリを利用します。

フルフィルメントからInline EditorのDISABLEDをオンにします。
スクリーンショット 2021-06-20 21.45.28.png

※"Billing Required" が表示されたら、GCPのコンソールから課金を有効にします。
スクリーンショット 2021-06-20 21.45.40.png

デプロイ

DEPLOYを押下してサンプルコードをデプロイします。
スクリーンショット 2021-06-17 13.33.28.png

デプロイの確認

デプロイが成功すると、GCPにCloud Functionsの関数として追加されます。

GCPコンソールのCloud Functionsを選択する
スクリーンショット 2021-06-17 13.37.00.png

Cloud Functionsの画面
スクリーンショット 2021-06-17 13.38.14.png

Dialogflow フルフィルメント ライブラリ

サンプルコードで利用している、Inline Editor用のライブラリです。

サンプルコード解説

'use strict';

// 1. firebase-functionsライブラリを読み込みます。
// https://firebase.google.com/docs/reference/functions
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');

process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements


// 2. FirebaseでHTTPSリクエストを待ち受けます
// https://firebase.google.com/docs/reference/functions/providers_https_?hl=ja#onrequest
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {

  // https://github.com/dialogflow/dialogflow-fulfillment-nodejs/blob/master/src/dialogflow-fulfillment.js
  const agent = new WebhookClient({ request, response });
  console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
  console.log('Dialogflow Request body: ' + JSON.stringify(request.body));

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

  function fallback(agent) {
    agent.add(`I didn't understand`);
    agent.add(`I'm sorry, can you try again?`);
  }

  let intentMap = new Map();
  intentMap.set('Default Welcome Intent', welcome);
  intentMap.set('Default Fallback Intent', fallback);

  // 3. リクエストハンドラにwelcome,fallback関数をセットします。
  // https://github.com/dialogflow/dialogflow-fulfillment-nodejs/blob/master/src/dialogflow-fulfillment.js
  agent.handleRequest(intentMap);
});

1. firebase-functionsライブラリを読み込みます。

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

Cloud FunctionsのAPIをそのまま利用することなく、firebase SDKライブラリを利用して、Cloud Functionsの機能を実装できます。

2. FirebaseでHTTPSリクエストを待ち受けます

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

HTTPSリクエストを待ち受けて、Expressサーバー形式のレスポンスを返します。

3. リクエストハンドラにwelcome,fallback関数をセットします。

agent.handleRequest(intentMap);

リクエストハンドラに関数をセットします。
HTTPSリクエストを受け付けた際に、ここでセットしたハンドラ関数が実行されます。

handleRequestメソッドは、webhookクライアントにコールバック関数を登録するイメージです。

参考

3
3
0

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
3
3