フルフィルメントを作成する(Dialogflow)

フルフィルメントは、アクション プロジェクトでユーザー入力を取得するための会話型インターフェースと、その入力を処理して最終的にアクションを実行するためのロジックを定義します。

概要

フルフィルメントは、アシスタントからリクエストを受け取り、そのリクエストを処理して応答します。このリクエストとレスポンスのやり取りにより会話が進み、最終的に最初のユーザー リクエストが実行されるまで続きます。

次の手順では、Actions SDK と Node.js または Java / Kotlin クライアント ライブラリを使用して、フルフィルメントを作成する方法について説明します。

  1. ActionsSdkApp オブジェクトを初期化します
  2. フルフィルメント ロジックでリクエストを処理するための関数を作成します。
で確認できます。

ダイアログを作成する

ActionsSdkApp オブジェクトを初期化する

次のコードは、 ActionsSdkApp Google Cloud Functions 用にボイラープレート Node.js を設定します。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Actions SDK(Node.js)
'use strict';

const {actionssdk} = require('actions-on-google');
const functions = require('firebase-functions');

const app = actionssdk({debug: true});

app.intent('actions.intent.MAIN', (conv) => {
  conv.ask('Hi!');
});

// More intent handling if needed
exports.myFunction = functions.https.onRequest(app);
をご覧ください。 <ph type="x-smartling-placeholder">
</ph>
Actions SDK(Java)
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi!");
return responseBuilder.build();
をご覧ください。 <ph type="x-smartling-placeholder">
</ph>
JSON
{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Hi!"
              }
            }
          ]
        }
      },
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ]
    }
  ],
  "conversationToken": "{\"data\":{}}",
  "userStorage": "{\"data\":{}}"
}

リクエストを処理する関数を作成する

ユーザーがフレーズを話すと、Google アシスタントからリクエストが届きます。宛先 リクエストに含まれるインテントを解決する方法、 トリガーされます。

リクエストを処理するには:

  1. ユーザー入力を処理するために必要なロジックを適用します。

  2. conv.ask() 関数を呼び出して、表示するレスポンスを渡します。 渡します。

次のコードは、単純なレスポンスの作成方法を示しています。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Actions SDK(Node.js)
conv.ask(`Hi! Say something, and I'll repeat it.`);
をご覧ください。 <ph type="x-smartling-placeholder">
</ph>
Actions SDK(Java)
ResponseBuilder responseBuilder =
    getResponseBuilder(request).add("Hi! Say something, and I'll repeat it.");
return responseBuilder.build();
をご覧ください。 <ph type="x-smartling-placeholder">
</ph>
JSON
{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Hi! Say something, and I'll repeat it."
              }
            }
          ]
        }
      },
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ]
    }
  ],
  "conversationToken": "{\"data\":{}}",
  "userStorage": "{\"data\":{}}"
}

インテントを処理する

トリガーされたインテントを処理する関数をすべて用意したら、app.intent を使用して以下を行います。 ハンドラをインテントに割り当てます。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Actions SDK(Node.js)
app.intent('actions.intent.TEXT', (conv) => {
  // handle text intent.
});
app.intent('actions.intent.MAIN', (conv) => {
  // handle main intent.
});
をご覧ください。 <ph type="x-smartling-placeholder">
</ph>
Actions SDK(Java)
@ForIntent("actions.intent.MAIN")
public ActionResponse main(ActionRequest request) {
  // handle main intent
  // ...
}

@ForIntent("actions.intent.TEXT")
public ActionResponse text(ActionRequest request) {
  // handle text intent
  // ...
}

会話を終了する

ユーザーからの入力が不要になり、会話を終了する場合は、 conv.close() 関数を呼び出します。 この関数は、ユーザーにテキストを読み上げ、マイクを閉じて会話を終了するように Google アシスタントに指示するものです。

主な呼び出しインテントを処理する

ユーザーが app.intent.action.MAIN インテントをトリガーしても、通常は ユーザー入力処理を行う必要はありません。アクション パッケージに多数のアクションが含まれていて、多数のユースケースを対象としている場合は、できることをいくつか伝えてユーザーを順応させることをおすすめします。

  1. レスポンスを引数として渡して conv.ask() 関数を呼び出します。 Google アシスタントがユーザーに応答を話しかけて、 指定されたいずれかのインテントをユーザーがトリガーするまで待機します。

次のスニペットは、単純なウェルカム インテントの処理方法を示しています。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Actions SDK(Node.js)
// handle the initialTrigger
function handleMainIntent(conv, input) {
  conv.ask(input);
}
をご覧ください。 <ph type="x-smartling-placeholder">
</ph>
Actions SDK(Java)
private ActionResponse handleMainIntent(ResponseBuilder rb, String input) {
  return rb.add(input).build();
}

会話の状態

Conversation HTTP/JSON Webhook API を使用している場合は、 JSON 形式のオブジェクト(conversationToken)を使用して やり取りされる情報。もし Node.js クライアント ライブラリを使用する場合、 conv.data フィールドに対して直接書き込みと読み取りができます。このフィールドは、リクエストとレスポンスの間で自動的にやり取りされます。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Actions SDK(Node.js)
conv.data = {something: 10};
let value = conv.data.something;
をご覧ください。 <ph type="x-smartling-placeholder">
</ph>
Actions SDK(Java)
ResponseBuilder rb = getResponseBuilder(request);
rb.getConversationData().put("something", 10);
Object value = rb.getConversationData().get("something");