フルフィルメントは、アクション プロジェクトでユーザー入力を取得するための会話型インターフェースと、その入力を処理して最終的にアクションを実行するためのロジックを定義します。
概要
フルフィルメントは、アシスタントからリクエストを受け取り、そのリクエストを処理して応答します。このリクエストとレスポンスのやり取りにより会話が進み、最終的に最初のユーザー リクエストが実行されるまで続きます。
次の手順では、Actions SDK と Node.js または Java / Kotlin クライアント ライブラリを使用して、フルフィルメントを作成する方法について説明します。
- ActionsSdkApp オブジェクトを初期化します。
- フルフィルメント ロジックでリクエストを処理するための関数を作成します。
ダイアログを作成する
ActionsSdkApp
オブジェクトを初期化する
次のコードは、
ActionsSdkApp
Google Cloud Functions 用にボイラープレート 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);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi!"); return responseBuilder.build();
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Hi!" } } ] } }, "possibleIntents": [ { "intent": "actions.intent.TEXT" } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
リクエストを処理する関数を作成する
ユーザーがフレーズを話すと、Google アシスタントからリクエストが届きます。宛先 リクエストに含まれるインテントを解決する方法、 トリガーされます。
リクエストを処理するには:
ユーザー入力を処理するために必要なロジックを適用します。
conv.ask()
関数を呼び出して、表示するレスポンスを渡します。 渡します。
次のコードは、単純なレスポンスの作成方法を示しています。
<ph type="x-smartling-placeholder">conv.ask(`Hi! Say something, and I'll repeat it.`);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi! Say something, and I'll repeat it."); return responseBuilder.build();
{ "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
を使用して以下を行います。
ハンドラをインテントに割り当てます。
app.intent('actions.intent.TEXT', (conv) => { // handle text intent. }); app.intent('actions.intent.MAIN', (conv) => { // handle main intent. });
@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
インテントをトリガーしても、通常は
ユーザー入力処理を行う必要はありません。アクション パッケージに多数のアクションが含まれていて、多数のユースケースを対象としている場合は、できることをいくつか伝えてユーザーを順応させることをおすすめします。
- レスポンスを引数として渡して
conv.ask()
関数を呼び出します。 Google アシスタントがユーザーに応答を話しかけて、 指定されたいずれかのインテントをユーザーがトリガーするまで待機します。
次のスニペットは、単純なウェルカム インテントの処理方法を示しています。
<ph type="x-smartling-placeholder">// handle the initialTrigger function handleMainIntent(conv, input) { conv.ask(input); }
private ActionResponse handleMainIntent(ResponseBuilder rb, String input) { return rb.add(input).build(); }
会話の状態
Conversation HTTP/JSON Webhook API を使用している場合は、
JSON 形式のオブジェクト(conversationToken
)を使用して
やり取りされる情報。もし
Node.js クライアント ライブラリを使用する場合、
conv.data
フィールドに対して直接書き込みと読み取りができます。このフィールドは、リクエストとレスポンスの間で自動的にやり取りされます。
conv.data = {something: 10}; let value = conv.data.something;
ResponseBuilder rb = getResponseBuilder(request); rb.getConversationData().put("something", 10); Object value = rb.getConversationData().get("something");