会話の終了

会話を途中で終了するには、次のように言います。

  • 「終了して」
  • 「キャンセルして」
  • 「停止して」
  • 「これで終わり」
  • 「さようなら」

デフォルトでは、アシスタントは会話を終了してイアコンを再生します。この動作を無効にする場合は、最後のリクエストを受け取るように選択します。これにより、フルフィルメント ロジックをクリーンアップして、もう一度ユーザーに応答できます。最終的なレスポンスは、textToSpeechdisplayText 値で 60 文字の制限を設定して、単一のシンプル レスポンスにする必要があります。

会話終了リクエストの最大実行時間は 2 秒です。レスポンスがない場合、デフォルトの終了イアコンで会話が終了します。文字数制限の超過、不適切なレスポンス タイプなどでカスタム キャンセル レスポンスに失敗した場合も、デフォルトの終了イアコンで会話が終了します。

Dialogflow

会話終了イベントを受け取るには:

  1. 画面左のナビゲーションで、[インテント] メニュー項目の横にある + アイコンをクリックします。
  2. インテントに名前を付けて、[イベント] セクションをクリックします。
  3. [イベントの追加] フィールドに「actions_intent_CANCEL」と入力します。
  4. [レスポンス] でレスポンスを指定します。あるいは、Webhook コードでこのインテントに独自のレスポンスを設定します。
  5. [このインテントを会話の終わりに設定する] を有効にします。
  6. [保存] をクリックします。
  7. 画面左のナビゲーションで [インテグレーション] をクリックします。
  8. [Google アシスタント] を選択して、[ドラフトの更新] をクリックしてから [テスト] をクリックします。変更がプロジェクトに反映されていることを確認します。

ユーザーが会話の終了をリクエストすると、作成したインテントがトリガーされ、レスポンスがユーザーに返されます。たとえば、クライアント ライブラリを使用してキャンセル インテントを処理し、レスポンスを返すフルフィルメント コードは次のようになります。下記の JSON は、Webhook レスポンスを示します。

Node.js
    const {dialogflow} = require('actions-on-google');
    const functions = require('firebase-functions');
    const app = dialogflow();

    // Dialogflow agent 'say_bye' intent handles 'actions_intent_CANCEL' event
    app.intent('say_bye', (conv) => {
      conv.close(`Okay, let's try this again later.`);
    });

    exports.myFunction = functions.https.onRequest(app);
Java
  class ConvExitsActionsDialogflow extends DialogflowApp {
    @ForIntent("actions.intent.CANCEL")
    public ActionResponse sayBye(ActionRequest request) {
      ResponseBuilder responseBuilder = getResponseBuilder(request);
      return responseBuilder.add("Okay, let's try this again later.").endConversation().build();
    }
  }
JSON
{
  "payload": {
    "google": {
      "expectUserResponse": false,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Okay, let's try this again later."
            }
          }
        ]
      }
    }
  }
}

Actions SDK

会話終了インテントを受け取るには:

  1. アクション パッケージの conversations オブジェクトで、ユーザーが会話を途中で終了した場合に actions.intent.CANCEL インテントを受け取ることを宣言します。下記の JSON は、Webhook リクエストを示します。

    {
      "actions": [
        {
          "description": "Default Welcome Intent",
          "name": "MAIN",
          "fulfillment": {
            "conversationName": "myConversation"
          },
          "intent": {
            "name": "actions.intent.MAIN",
            "trigger": {
              "queryPatterns": [
                "talk to myConversation"
              ]
            }
          }
        }
      ],
      "conversations": {
        "myConversation": {
          "name": "myConversation",
          "url": "https://example.com",
          "inDialogIntents": [
            {
              "name": "actions.intent.CANCEL"
            }
          ]
        }
      },
      "locale": "en"
    }
    
  2. actions.intent.CANCEL インテントを含むリクエストを受け取ったときに、必要なフルフィルメント ロジックをクリーンアップし、適切な終了フレーズをユーザーに返します。たとえば、クライアント ライブラリを使用してキャンセル インテントを処理するフルフィルメント コードは次のようになります。下記の JSON は、Webhook レスポンスを示します。

    Node.js
        const {actionssdk} = require('actions-on-google');
        const functions = require('firebase-functions');
        const app = actionssdk();
    
        app.intent('actions.intent.CANCEL', (conv) => {
          conv.close(`Okay, let's try this again later.`);
        });
    
        exports.myFunction = functions.https.onRequest(app);
    
    Java
      class ConvExitsActionsSdk extends ActionsSdkApp {
        @ForIntent("say_bye")
        public ActionResponse sayBye(ActionRequest request) {
          ResponseBuilder responseBuilder = getResponseBuilder(request);
          return responseBuilder.add("Okay, let's try this again later.").endConversation().build();
        }
      }
    
    JSON
    {
      "expectUserResponse": false,
      "finalResponse": {
        "richResponse": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Okay, let's try this again later."
              }
            }
          ]
        }
      }
    }