जवाब देना (Dialogflow)

Dialogflow में जानें

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

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

नीचे दी गई सुविधाओं का इस्तेमाल उन मामलों को हैंडल करने के लिए किया जा सकता है जहां उपयोगकर्ता आपकी कार्रवाइयों (कोई इनपुट नहीं) के लिए इनपुट नहीं देते:

  • सिस्टम के लिए डिफ़ॉल्ट जवाब - ये सेटिंग, उपयोगकर्ताओं को पहले से पहले से तैयार की गई सेटिंग की मदद से अपने-आप जवाब देती हैं. ये सभी सेटिंग सामान्य होती हैं.
  • डाइनैमिक जवाब - यह एलान करते हैं कि आप खुद को फिर से निर्देश देना चाहते हैं. साथ ही, जब भी कोई इनपुट न हो, तब इंटेंट (कार्रवाई SDK) या इवेंट (Dialogflow) पाएं, ताकि आप उन्हें अलग-अलग तरीके से मैनेज कर सकें.

सिस्टम के डिफ़ॉल्ट जवाब

डिफ़ॉल्ट रूप से, जब Assistant को कोई जवाब दिया जाता है, तो सिस्टम डिफ़ॉल्ट तरीकों का इस्तेमाल करके, लोगों से उनका इनपुट दोहराने या उन्हें दोबारा टाइप करने के लिए कहता है.

Dialogflow

Dialogflow ज़्यादा से ज़्यादा तीन ऐसे इनपुट लागू करता है जो मैच नहीं करते और बिना इनपुट वाले इनपुट इस्तेमाल करते हैं. किसी बातचीत में, डेटा कलेक्शन की तीन बार कोशिश करने के बाद, आपका Dialogflow एजेंट बातचीत को डिफ़ॉल्ट जवाब के साथ खत्म कर देगा. Dialogflow में मैच नहीं होने वाला इनपुट तब होता है, जब आपके फ़ॉलबैक इंटेंट में से कोई एक ट्रिगर होता है.

डाइनैमिक सुझाव

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

Dialogflow

आप दो तरह के नो-इनपुट इंटेंट बना सकते हैं:

  • नॉर्मल इंटेंट - यह तरीका किसी कॉन्टेक्स्ट पर लागू नहीं होता. इसलिए, यह तब ट्रिगर होगा, जब ट्रिगर करने के लिए कोई दूसरा, ज़्यादा काम का इंटेंट न हो. यह उन सामान्य सुझावों के लिए उपयोगी है जिन्हें आप ज़्यादातर मामलों में लागू करना चाहते हैं.

  • फ़ॉलो-अप इंटेंट - फ़ॉलो-अप इंटेंट, Dialogflow कॉन्टेक्स्ट के ज़रिए लागू किए जाते हैं, ताकि यह पक्का किया जा सके कि बातचीत के कुछ मोड़ पर ही फिर से प्रॉम्प्ट ट्रिगर हों. यह उन बदलावों के लिए बहुत काम आता है जो आपके हिसाब से तैयार किए गए हैं और जिन्हें आपको कुछ खास स्थितियों में लागू करना है.

नो-इनपुट इवेंट को मैनेज करने के लिए:

  1. बाईं ओर मौजूद नेविगेशन में, इंटेंट पर क्लिक करें.
  2. सामान्य इंटेंट या फ़ॉलो-अप इंटेंट बनाएं.
    • सामान्य इंटेंट के लिए: इंटेंट मेन्यू आइटम के पास + आइकॉन पर क्लिक करें और अपने इंटेंट को "Reprompt" जैसा कोई नाम दें.

    • फ़ॉलो-अप इंटेंट के लिए: उस इंटेंट पर कर्सर घुमाएं जिसके लिए आपको नो-इनपुट रेप्रोंप्ट को पसंद के मुताबिक बनाना है और फ़ॉलो-अप इंटेंट जोड़ें > कस्टम पर क्लिक करें. ओरिजनल इंटेंट के नीचे एक नया इंटेंट बनाया जाता है.

  3. इंटेंट एडिटर खोलने के लिए, बनाए गए नए इंटेंट पर क्लिक करें.
  4. इवेंट सेक्शन पर क्लिक करें और इवेंट जोड़ें फ़ील्ड में "actions_intent_NO_INPUT" डालें.
  5. कार्रवाइयां सेक्शन में, कोई कार्रवाई का नाम डालें या डिफ़ॉल्ट रूप से दिया गया नाम इस्तेमाल करें. इस उदाहरण के लिए, हम "no.input" का इस्तेमाल करेंगे.

  6. सेव करें पर क्लिक करें.
  7. बाईं ओर मौजूद नेविगेशन में, इंटिग्रेशन पर क्लिक करें
  8. Google Assistant चुनें और जांच करें पर क्लिक करके पक्का करें कि बदलाव आपके Actions प्रोजेक्ट में दिख रहे हैं.

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

Node.js

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

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

app.intent('Reprompt', (conv) => {
  const repromptCount = parseInt(conv.arguments.get('REPROMPT_COUNT'));
  if (repromptCount === 0) {
  conv.ask(`What was that?`);
  } else if (repromptCount === 1) {
  conv.ask(`Sorry I didn't catch that. Could you repeat yourself?`);
  } else if (conv.arguments.get('IS_FINAL_REPROMPT')) {
  conv.close(`Okay let's try this again later.`);
  }
});

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("Reprompt")
  public ActionResponse reprompt(ActionRequest request) {
    ResponseBuilder responseBuilder = getResponseBuilder(request);
    int repromptCount = request.getRepromptCount();
    String response;
    if (repromptCount == 0) {
      response = "What was that?";
    } else if (repromptCount == 1) {
      response = "Sorry, I didn't catch that. Could you repeat yourself?";
    } else {
      responseBuilder.endConversation();
      response = "Okay let's try this again later.";
    }
    return responseBuilder.add(response).build();
  }
}

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

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

{
  "responseId": "f26a9188-4998-42eb-ac16-d0e6e273b137-712767ed",
  "queryResult": {
    "queryText": "actions_intent_NO_INPUT",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentText": "Webhook failed for intent: Reprompt",
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            "Webhook failed for intent: Reprompt"
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "projects/df-reprompts-kohler/agent/sessions/ABwppHFi9Dpwy6KiEtS0UIPDNVfa7mlkrPIEZRlikFkjuN_4SGPixgX8OCatpXu38ln7VG43-nk-7veZWhds3nLljA/contexts/actions_capability_media_response_audio"
      },
      {
        "name": "projects/df-reprompts-kohler/agent/sessions/ABwppHFi9Dpwy6KiEtS0UIPDNVfa7mlkrPIEZRlikFkjuN_4SGPixgX8OCatpXu38ln7VG43-nk-7veZWhds3nLljA/contexts/actions_capability_account_linking"
      },
      {
        "name": "projects/df-reprompts-kohler/agent/sessions/ABwppHFi9Dpwy6KiEtS0UIPDNVfa7mlkrPIEZRlikFkjuN_4SGPixgX8OCatpXu38ln7VG43-nk-7veZWhds3nLljA/contexts/actions_capability_audio_output"
      },
      {
        "name": "projects/df-reprompts-kohler/agent/sessions/ABwppHFi9Dpwy6KiEtS0UIPDNVfa7mlkrPIEZRlikFkjuN_4SGPixgX8OCatpXu38ln7VG43-nk-7veZWhds3nLljA/contexts/google_assistant_input_type_voice"
      },
      {
        "name": "projects/df-reprompts-kohler/agent/sessions/ABwppHFi9Dpwy6KiEtS0UIPDNVfa7mlkrPIEZRlikFkjuN_4SGPixgX8OCatpXu38ln7VG43-nk-7veZWhds3nLljA/contexts/actions_intent_no_input",
        "parameters": {
          "REPROMPT_COUNT": 2,
          "IS_FINAL_REPROMPT": true
        }
      }
    ],
    "intent": {
      "name": "projects/df-reprompts-kohler/agent/intents/75dfd97d-6368-4436-9533-70f05ae76c96",
      "displayName": "Reprompt"
    },
    "intentDetectionConfidence": 1,
    "languageCode": "en"
  },
  "originalDetectIntentRequest": {
    "source": "google",
    "version": "2",
    "payload": {
      "user": {
        "locale": "en-US",
        "userVerificationStatus": "VERIFIED"
      },
      "conversation": {
        "conversationId": "ABwppHFi9Dpwy6KiEtS0UIPDNVfa7mlkrPIEZRlikFkjuN_4SGPixgX8OCatpXu38ln7VG43-nk-7veZWhds3nLljA",
        "type": "ACTIVE",
        "conversationToken": "[]"
      },
      "inputs": [
        {
          "intent": "actions.intent.NO_INPUT",
          "rawInputs": [
            {
              "inputType": "VOICE"
            }
          ],
          "arguments": [
            {
              "name": "REPROMPT_COUNT",
              "intValue": "2"
            },
            {
              "name": "IS_FINAL_REPROMPT",
              "boolValue": true
            }
          ]
        }
      ],
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          },
          {
            "name": "actions.capability.ACCOUNT_LINKING"
          },
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          }
        ]
      },
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            },
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            },
            {
              "name": "actions.capability.WEB_BROWSER"
            }
          ]
        }
      ]
    }
  },
  "session": "projects/df-reprompts-kohler/agent/sessions/ABwppHFi9Dpwy6KiEtS0UIPDNVfa7mlkrPIEZRlikFkjuN_4SGPixgX8OCatpXu38ln7VG43-nk-7veZWhds3nLljA"
}

जवाब JSON

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

{
  "payload": {
    "google": {
      "expectUserResponse": false,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Okay let's try this again later."
            }
          }
        ]
      }
    }
  }
}

Actions SDK टूल

नो-इनपुट इंटेंट को हैंडल करने के लिए:

  1. अपनी कार्रवाई के पैकेज के अंदर conversations ऑब्जेक्ट में, एलान करें कि जब भी कोई उपयोगकर्ता इनपुट न दे, तब आपको actions.intent.NO_INPUT इंटेंट चाहिए.
    
    {
      "actions": [
        {
          "description": "Default Welcome Intent",
          "name": "MAIN",
          "fulfillment": {
            "conversationName": "conversation_1"
          },
          "intent": {
            "name": "actions.intent.MAIN"
          }
        }
      ],
      "conversations": {
        "conversation_1": {
          "name": "conversation_1",
          "url": "YOUR_FULFILLMENT_URL",
          "inDialogIntents": [
            {
              "name": "actions.intent.NO_INPUT"
            }
          ]
        }
      }
    }
    
  2. जब Assistant को उपयोगकर्ता से कोई इनपुट नहीं मिलता, तो कार्रवाई पूरी करने के अगले अनुरोध में आपको नो-इनपुट इंटेंट मिलेगा. इसके बाद, इंटेंट को प्रोसेस किया जा सकता है और सही जवाब दिया जा सकता है. यहां एक उदाहरण दिया गया है:

    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 this sample on a speaker device, ` +
        `and stay silent when the mic is open. If trying ` +
        `on the Actions console simulator, click the no-input ` +
        `button next to the text input field.`);
    });
    
    app.intent('actions.intent.TEXT', (conv, input) => {
      conv.ask(`You said ${input}`);
      conv.ask(`Try this sample on a speaker device, ` +
        `and stay silent when the mic is open. If trying ` +
        `on the Actions console simulator, click the no-input ` +
        `button next to the text input field.`);
    });
    
    app.intent('actions.intent.NO_INPUT', (conv) => {
      const repromptCount = parseInt(conv.arguments.get('REPROMPT_COUNT'));
      if (repromptCount === 0) {
        conv.ask(`What was that?`);
      } else if (repromptCount === 1) {
        conv.ask(`Sorry I didn't catch that. Could you repeat yourself?`);
      } else if (conv.arguments.get('IS_FINAL_REPROMPT')) {
        conv.close(`Okay let's try this again later.`);
      }
    });
    
    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 this sample on a speaker device, and stay silent when the mic is open. If trying on the Actions console simulator, click the no-input button next to the text input field.");
        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 this sample on a speaker device, and stay silent when the mic is open. If trying on the Actions console simulator, click the no-input button next to the text input field.");
        return responseBuilder.build();
      }
    
      @ForIntent("actions.intent.NO_INPUT")
      public ActionResponse reprompt(ActionRequest request) {
        ResponseBuilder responseBuilder = getResponseBuilder(request);
        int repromptCount = request.getRepromptCount();
        String response;
        if (repromptCount == 0) {
          response = "What was that?";
        } else if (repromptCount == 1) {
          response = "Sorry, I didn't catch that. Could you repeat yourself?";
        } else {
          responseBuilder.endConversation();
          response = "Okay let's try this again later.";
        }
        return responseBuilder.add(response).build();
      }
    
    }

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

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

    {
      "user": {
        "locale": "en-US",
        "userVerificationStatus": "VERIFIED"
      },
      "conversation": {
        "conversationId": "ABwppHEVDuKUPjdZ4Ud-F2yBXN5ssRg2funUp59hSHQheAi-B5Y3EzehAKFtVwMkduqMRWscUp77ScrDjYnYxISqAM-qOXuXEuCw",
        "type": "ACTIVE",
        "conversationToken": "{\"data\":{}}"
      },
      "inputs": [
        {
          "intent": "actions.intent.NO_INPUT",
          "rawInputs": [
            {
              "inputType": "VOICE"
            }
          ],
          "arguments": [
            {
              "name": "REPROMPT_COUNT",
              "intValue": "2"
            },
            {
              "name": "IS_FINAL_REPROMPT",
              "boolValue": true
            }
          ]
        }
      ],
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          },
          {
            "name": "actions.capability.ACCOUNT_LINKING"
          },
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          }
        ]
      },
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            },
            {
              "name": "actions.capability.WEB_BROWSER"
            },
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            }
          ]
        }
      ]
    }

    जवाब JSON

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

    {
      "expectUserResponse": false,
      "finalResponse": {
        "richResponse": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Okay let's try this again later."
              }
            }
          ]
        }
      }
    }