बातचीत एग्ज़िट (Dialogflow)

Dialogflow में जानें

Dialogflow में हमारे बातचीत से बाहर के नमूने को इंपोर्ट करने के लिए, जारी रखें पर क्लिक करें. इसके बाद, सैंपल को डिप्लॉय और टेस्ट करने के लिए, यह तरीका अपनाएं:

  1. एजेंट का नाम डालें और सैंपल के लिए, नया Dialogflow एजेंट बनाएं.
  2. एजेंट इंपोर्ट हो जाने के बाद, एजेंट पर जाएं पर क्लिक करें.
  3. मुख्य नेविगेशन मेन्यू से, पूरा किया गया पर जाएं.
  4. इनलाइन एडिटर को चालू करें. इसके बाद, डिप्लॉय करें पर क्लिक करें. एडिटर में सैंपल कोड होता है.
  5. मुख्य नेविगेशन मेन्यू में, इंटिग्रेशन पर जाएं. इसके बाद, Google Assistant पर क्लिक करें.
  6. इसके बाद दिखने वाली मोडल विंडो में, बदलावों की ऑटो-झलक देखने की सुविधा को चालू करें. इसके बाद, ऐक्शन सिम्युलेटर खोलने के लिए, जांच करें पर क्लिक करें.
  7. नमूने की जांच करने के लिए सिम्युलेटर में, Talk to my test app डालें!
जारी रखें

जब भी उपयोगकर्ता बातचीत के बीच में बंद करना चाहें, तो वे इस तरह की बातें कर सकते हैं:

  • "exit"
  • "रद्द करें"
  • "stop"
  • "कोई बात नहीं"
  • "अलविदा"

डिफ़ॉल्ट रूप से, Assistant आपकी बातचीत से बाहर निकलकर एक ईयरकॉन बनाती है. इस तरीके को बदलने के लिए, एक आखिरी अनुरोध पाने के लिए ऑप्ट-इन किया जा सकता है. इसका इस्तेमाल, फ़ुलफ़िलमेंट लॉजिक को हटाने और उपयोगकर्ता को आखिरी बार जवाब देने के लिए किया जा सकता है. आपका आखिरी जवाब एक आसान जवाब होना चाहिए जिसमें textToSpeech और displayText की वैल्यू के लिए 60 वर्ण की सीमा हो.

बातचीत बंद करने के अनुरोधों को पूरा करने में ज़्यादा से ज़्यादा दो सेकंड लगते हैं. अगर कोई जवाब नहीं मिलता है, तो बातचीत, डिफ़ॉल्ट एग्ज़िट ईयरकॉन पर खत्म हो जाएगी. अगर पसंद के मुताबिक रद्द करने का जवाब काम नहीं करता (वर्ण सीमा से ज़्यादा, गलत रिस्पॉन्स टाइप वगैरह की वजह से), तो बातचीत भी डिफ़ॉल्ट एग्ज़िट ईयरकॉन के साथ खत्म हो जाएगी.

Dialogflow

बातचीत से बाहर होने के इवेंट पाने के लिए:

  1. बाईं ओर मौजूद नेविगेशन में, इंटेंट मेन्यू आइटम के पास + आइकॉन पर क्लिक करें.
  2. इंटेंट को कोई नाम दें (जैसे कि Exit Conversation) और इवेंट सेक्शन पर क्लिक करें.
  3. इवेंट जोड़ें फ़ील्ड में actions_intent_CANCEL डालें.
  4. अपने वेबहुक कोड में, इस इंटेंट के लिए जवाब में जाकर या अपना जवाब सेट करें.
  5. इस इंटेंट को बातचीत के खत्म होने के तौर पर सेट करें को चालू करें.
  6. सेव करें पर क्लिक करें.
  7. बाईं ओर मौजूद नेविगेशन में, इंटिग्रेशन पर क्लिक करें.
  8. Google Assistant चुनें और ड्राफ़्ट अपडेट करें पर क्लिक करें. इसके बाद, जांच करें पर क्लिक करके पक्का करें कि बदलाव आपके प्रोजेक्ट में दिख रहे हैं.

जब कोई उपयोगकर्ता, बातचीत को बंद करने का अनुरोध करता है, तो आपका बनाया हुआ इंटेंट ट्रिगर हो जाता है और आपका जवाब उपयोगकर्ता को वापस भेज दिया जाता है. उदाहरण के लिए, यहां कुछ फ़ुलफ़िलमेंट कोड दिए गए हैं जो रद्द करने के इंटेंट को मैनेज करने और जवाब देने के लिए क्लाइंट लाइब्रेरी का इस्तेमाल करते हैं.

Node.js

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

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

app.intent('Exit Conversation', (conv) => {
  conv.close(`Okay, talk to you next time!`);
});

exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

Java

package com.example;

import com.google.actions.api.ActionRequest;
import com.google.actions.api.ActionResponse;
import com.google.actions.api.DialogflowApp;
import com.google.actions.api.ForIntent;
import com.google.actions.api.response.ResponseBuilder;

public class MyActionsApp extends DialogflowApp {

  @ForIntent("Exit Conversation")
  public ActionResponse exit(ActionRequest request) {
    ResponseBuilder responseBuilder = getResponseBuilder(request);
    responseBuilder.add("Okay, talk to you next time!");
    responseBuilder.endConversation();
    return responseBuilder.build();
  }
}

JSON का अनुरोध करें

ध्यान दें कि नीचे दिया गया JSON, वेबहुक अनुरोध के बारे में बताता है.

{
  "responseId": "e0c9d47f-aa99-4d03-bd48-a64c79e9c2a2-712767ed",
  "queryResult": {
    "queryText": "actions_intent_CANCEL",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentText": "Webhook failed for intent: Exit Conversation",
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            "Webhook failed for intent: Exit Conversation"
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_audio_output"
      },
      {
        "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_media_response_audio"
      },
      {
        "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_account_linking"
      },
      {
        "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_screen_output"
      },
      {
        "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_web_browser"
      },
      {
        "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/google_assistant_input_type_keyboard"
      },
      {
        "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_intent_cancel"
      }
    ],
    "intent": {
      "name": "projects/df-exits-kohler/agent/intents/b506991f-ad7a-4c4b-8adc-5e6c62727381",
      "displayName": "Exit Conversation"
    },
    "intentDetectionConfidence": 1,
    "languageCode": "en"
  },
  "originalDetectIntentRequest": {
    "source": "google",
    "version": "2",
    "payload": {
      "user": {
        "locale": "en-US",
        "userVerificationStatus": "VERIFIED"
      },
      "conversation": {
        "conversationId": "ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0",
        "type": "ACTIVE",
        "conversationToken": "[]"
      },
      "inputs": [
        {
          "intent": "actions.intent.CANCEL",
          "rawInputs": [
            {
              "inputType": "KEYBOARD",
              "query": "cancel"
            }
          ]
        }
      ],
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          },
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          },
          {
            "name": "actions.capability.ACCOUNT_LINKING"
          },
          {
            "name": "actions.capability.SCREEN_OUTPUT"
          },
          {
            "name": "actions.capability.WEB_BROWSER"
          }
        ]
      },
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            },
            {
              "name": "actions.capability.WEB_BROWSER"
            },
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            }
          ]
        }
      ]
    }
  },
  "session": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0"
}

जवाब JSON

ध्यान दें कि नीचे दिया गया JSON, वेबहुक रिस्पॉन्स के बारे में बताता है.

{
  "payload": {
    "google": {
      "expectUserResponse": false,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Okay, talk to you next time!"
            }
          }
        ]
      }
    }
  }
}

Actions SDK टूल

बातचीत से बाहर निकलने के इंटेंट पाने के लिए:

  1. अपनी कार्रवाई के पैकेज में मौजूद conversations ऑब्जेक्ट में, एलान करें कि जब भी कोई उपयोगकर्ता बातचीत के बीच में बाहर निकलना चाहे, तो आप actions.intent.CANCEL इंटेंट पाना चाहते हैं.

    
    {
      "actions": [
        {
          "description": "Default Welcome Intent",
          "name": "MAIN",
          "fulfillment": {
            "conversationName": "conversation_1"
          },
          "intent": {
            "name": "actions.intent.MAIN"
          }
        }
      ],
      "conversations": {
        "conversation_1": {
          "name": "conversation_1",
          "url": "YOUR_ENDPOINT_URL",
          "inDialogIntents": [
            {
              "name": "actions.intent.CANCEL"
            }
          ]
        }
      }
    }
    
  2. जब आपको actions.intent.CANCEL इंटेंट वाला कोई अनुरोध मिलता है, तो इस्तेमाल करने के लिए अपनी पसंद के लॉजिक को हटा दें. साथ ही, उपयोगकर्ता को सही एग्ज़िट वाक्यांश दें. उदाहरण के लिए, यहां कुछ फ़ुलफ़िलमेंट कोड दिए गए हैं. जो रद्द करने के इंटेंट को मैनेज करने के लिए, क्लाइंट लाइब्रेरी का इस्तेमाल करते हैं.

    Node.js

    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! Try saying 'exit' or 'cancel'`);
    });
    
    app.intent('actions.intent.TEXT', (conv, input) => {
      conv.ask(`You said ${input}`);
      conv.ask(`Try saying 'exit' or 'cancel'`);
    });
    
    app.intent('actions.intent.CANCEL', (conv) => {
      conv.close(`Okay, talk to you next time!`);
    });
    
    exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

    Java

    package com.example;
    
    import com.google.actions.api.ActionRequest;
    import com.google.actions.api.ActionResponse;
    import com.google.actions.api.ActionsSdkApp;
    import com.google.actions.api.ConstantsKt;
    import com.google.actions.api.ForIntent;
    import com.google.actions.api.response.ResponseBuilder;
    import com.google.actions.api.response.helperintent.Confirmation;
    import com.google.actions.api.response.helperintent.DateTimePrompt;
    import com.google.actions.api.response.helperintent.Permission;
    import com.google.actions.api.response.helperintent.Place;
    import com.google.api.services.actions_fulfillment.v2.model.DateTime;
    import com.google.api.services.actions_fulfillment.v2.model.Location;
    
    public class MyActionsApp extends ActionsSdkApp {
    
      @ForIntent("actions.intent.MAIN")
      public ActionResponse welcome(ActionRequest request) {
        ResponseBuilder responseBuilder = getResponseBuilder(request);
        responseBuilder.add("Hi! Try saying 'exit' or 'cancel'");
        return responseBuilder.build();
      }
    
      @ForIntent("actions.intent.TEXT")
      public ActionResponse fallback(ActionRequest request) {
        ResponseBuilder responseBuilder = getResponseBuilder(request);
        responseBuilder.add("You said " + request.getRawInput().getQuery());
        responseBuilder.add("Try saying 'exit' or 'cancel'");
        return responseBuilder.build();
      }
    
      @ForIntent("actions.intent.CANCEL")
      public ActionResponse exit(ActionRequest request) {
        ResponseBuilder responseBuilder = getResponseBuilder(request);
        responseBuilder.add("Okay, talk to you next time!");
        responseBuilder.endConversation();
        return responseBuilder.build();
      }
    
    }

    JSON का अनुरोध करें

    ध्यान दें कि नीचे दिया गया JSON, वेबहुक अनुरोध के बारे में बताता है.

    {
      "user": {
        "locale": "en-US",
        "userVerificationStatus": "VERIFIED"
      },
      "conversation": {
        "conversationId": "ABwppHEtH6XptryyLGWDBOVnLgy8EkOclTPETd4lcLh_f6ghQAzzg0seUuq3YocyFT8B17N6AGD6YPPjQw5CXBM",
        "type": "NEW"
      },
      "inputs": [
        {
          "intent": "actions.intent.CANCEL",
          "rawInputs": [
            {
              "inputType": "KEYBOARD",
              "query": "exit"
            }
          ]
        }
      ],
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.SCREEN_OUTPUT"
          },
          {
            "name": "actions.capability.ACCOUNT_LINKING"
          },
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          },
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          },
          {
            "name": "actions.capability.WEB_BROWSER"
          }
        ]
      },
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            },
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            },
            {
              "name": "actions.capability.WEB_BROWSER"
            }
          ]
        }
      ]
    }

    जवाब JSON

    ध्यान दें कि नीचे दिया गया JSON, वेबहुक रिस्पॉन्स के बारे में बताता है.

    {
      "expectUserResponse": false,
      "finalResponse": {
        "richResponse": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Okay, talk to you next time!"
              }
            }
          ]
        }
      }
    }