बिल्ड फ़ुलफ़िलमेंट (Dialogflow)

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

अपनी बातचीत के बारे में बताएं

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

अपनी पूरी बातचीत को परिभाषित करने के लिए, जितने चाहे उतने इंटेंट बनाए जा सकते हैं व्याकरण.

इंटेंट बनाएं

Dialogflow के इंटेंट मेन्यू आइटम में जाकर + निशान पर क्लिक करें बाएं नेविगेशन का विकल्प चुनें. इंटेंट एडिटर वहां दिखता है जहां यह जानकारी डाली जा सकती है:

  • इंटेंट का नाम, IDE में दिखाए गए इंटेंट का नाम है.
  • कॉन्टेक्स्ट की मदद से, इंटेंट को कुछ खास मामलों में ट्रिगर किया जा सकता है. Contexts पर Dialogflow का दस्तावेज़ पढ़ें हमारा वीडियो देखें.
  • इवेंट, इंटेंट को ट्रिगर करते हैं. इसके लिए, उपयोगकर्ताओं को कुछ बोलने की ज़रूरत नहीं होती. एक इवेंट का उदाहरण GOOGLE_ASSISTANT_WELCOME है. इससे Google Assistant से बात करवाओ. इस इवेंट का इस्तेमाल आपकी कार्रवाई के लिए किया जाता है डिफ़ॉल्ट कार्रवाई सेट की गई है. पहले से मौजूद हेल्पर इंटेंट के बारे में ज़्यादा जानने के लिए, हमारा दस्तावेज़ देखें.
  • ट्रेनिंग के वाक्यांश से पता चलता है कि ट्रिगर करने के लिए उपयोगकर्ताओं को क्या बोलना होगा (व्याकरण) इंटेंट. यहां कुछ वाक्यांश (5-10) टाइप करें जिन्हें उपयोगकर्ता ट्रिगर करने के लिए कह सकते हैं इंटेंट. डायलॉग फ़्लो, उदाहरण के सामान्य वैरिएशन को अपने-आप मैनेज करता है वाक्यांशों को शामिल न करें.
  • कार्रवाई और पैरामीटर से यह तय होता है कि ग्राहक को आइटम भेजने के लिए कौनसा डेटा भेजा जाएगा, अगर इस इंटेंट के लिए फ़ुलफ़िलमेंट चालू है. इसमें उपयोगकर्ता के इनपुट और नाम का इस्तेमाल, यह पता लगाने के लिए किया जा सकता है कि इंटेंट ट्रिगर हुआ. आपको अपने इंटेंट को इसके साथ मैप करने के लिए बाद में इस नाम का इस्तेमाल करना होगा फ़ुलफ़िलमेंट लॉजिक के हिसाब से. कार्रवाइयां और पैरामीटर देखें कार्रवाइयां तय करने के बारे में ज़्यादा जानकारी के लिए, Dialogflow दस्तावेज़ देखें.

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

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

Dialogflow में जवाब तैयार किए जा रहे हैं

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

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

ग्राहक को आइटम भेजने से जुड़े जवाब तैयार करना

आपका फ़ुलफ़िलमेंट कोड, किसी कार्रवाई के लिए वेबहुक फ़ुलफ़िलमेंट लॉजिक में होस्ट किया गया है. उदाहरण के लिए, Silly Name Maker सैंपल में, 'Firebase के लिए Cloud फ़ंक्शन' के लिए, यह लॉजिक index.js में देखा जा सकता है.

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

हमारा सुझाव है कि आप अनुरोधों को प्रोसेस करने के लिए, Node.js क्लाइंट लाइब्रेरी का इस्तेमाल करें और जवाब दें. क्लाइंट लाइब्रेरी का इस्तेमाल करने की सामान्य प्रक्रिया यहां दी गई है:

  1. Dialogflow ऑब्जेक्ट को शुरू करें. यह ऑब्जेक्ट, अनुरोधों को सुनने और उन्हें पार्स करने का काम अपने-आप मैनेज करता है, ताकि इसके बाद, उन्हें प्रोसेस किया जा सके.
  2. अनुरोधों को हैंडल करने के लिए फ़ंक्शन बनाएं. ये फ़ंक्शन, उपयोगकर्ता के इनपुट और इंटेंट के अन्य कॉम्पोनेंट को प्रोसेस करते हैं और डायलॉग बॉक्स पर वापस जाने के लिए, जवाब तैयार करें.

Dialogflow ऑब्जेक्ट शुरू करें

यह कोड Dialogflow को इंस्टैंशिएट करता है और कुछ बॉयलरप्लेट करता है Google Cloud Functions के लिए Node.js का सेटअप:

Node.js
'use strict';

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

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

app.intent('Default Welcome Intent', (conv) => {
  // Do things
});
exports.yourAction = functions.https.onRequest(app);
जावा
public class DfFulfillment extends DialogflowApp {
  private static final Logger LOGGER = LoggerFactory.getLogger(DfFulfillment.class);

  @ForIntent("Default Welcome Intent")
  public ActionResponse welcome(ActionRequest request) {
    // Do things
    // ...
  }

अनुरोधों को मैनेज करने के लिए फ़ंक्शन बनाएं

जब उपयोगकर्ता कोई ऐसा वाक्यांश बोलते हैं जो किसी इंटेंट को ट्रिगर करता है, तो आपको इनसे एक अनुरोध मिलता है ऐसा डायलॉग बॉक्स जिसे आपके फ़ुलफ़िलमेंट में किसी फ़ंक्शन के साथ हैंडल किया जाता है. इसमें फ़ंक्शन है, तो आप आमतौर पर ये काम करेंगे:

  1. उपयोगकर्ता के इनपुट को प्रोसेस करने के लिए कोई भी ज़रूरी लॉजिक इस्तेमाल करें.
  2. ट्रिगर किए गए इंटेंट के हिसाब से जवाब देने के लिए, अपने जवाब बनाएं. ध्यान दें: यह बताना कि आपके उपयोगकर्ता सही जवाब बनाने के लिए इसका इस्तेमाल कर रहे हैं. यहां जाएं: प्लैटफ़ॉर्म की क्षमता के लिए अलग-अलग प्लैटफ़ॉर्म के लिए जवाबों को सेट करने के तरीके के बारे में ज़्यादा जानकारी मिलेगी.
  3. अपने जवाब के साथ ask() फ़ंक्शन को कॉल करें.

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

Node.js
const app = dialogflow();
app.intent('Default Welcome Intent', (conv) => {
conv.ask('Welcome to number echo! Say a number.');
});
app.intent('Input Number', (conv, {num}) => {
// extract the num parameter as a local string variable
conv.close(`You said ${num}`);
});
जावा
@ForIntent("Default Welcome Intent")
public ActionResponse defaultWelcome(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  rb.add("Welcome to number echo! Say a number.");
  return rb.build();
}

@ForIntent("Input Number")
public ActionResponse inputNumber(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  Integer number = (Integer) request.getParameter("num");
  rb.add("You said " + number.toString());
  return rb.endConversation().build();
}

ऊपर दिए गए कोड के साथ मौजूद कस्टम इंटेंट इनपुट नंबर उपयोगकर्ता के उच्चारण से नंबर एक्सट्रैक्ट करने के लिए, @sys.number इकाई. फिर इंटेंट यह num पैरामीटर को भेजता है, जिसमें उपयोगकर्ता की संख्या शामिल होती है. फ़ंक्शन को पूरा करना होगा.

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

Node.js
const WELCOME_INTENT = 'Default Welcome Intent';
const NUMBER_INTENT = 'Input Number';
const NUMBER_PARAMETER = 'num';
// you can add a fallback function instead of a function for individual intents
app.fallback((conv) => {
 // intent contains the name of the intent
 // you defined in the Intents area of Dialogflow
 const intent = conv.intent;
 switch (intent) {
   case WELCOME_INTENT:
     conv.ask('Welcome! Say a number.');
     break;
   case NUMBER_INTENT:
     const num = conv.parameters[NUMBER_PARAMETER];
     conv.close(`You said ${num}`);
     break;
 }
});
जावा
// you can add a fallback function instead of a function for individual intents
@ForIntent("Default Fallback Intent")
public ActionResponse fallback(ActionRequest request) {
  final String WELCOME_INTENT = "Default Welcome Intent";
  final String NUMBER_INTENT = "Input Number";
  final String NUMBER_ARGUMENT = "num";
  // intent contains the name of the intent
  // you defined in the Intents area of Dialogflow
  ResponseBuilder rb = getResponseBuilder(request);
  String intent = request.getIntent();
  switch (intent) {
    case WELCOME_INTENT:
      rb.add("Welcome! Say a number.");
      break;
    case NUMBER_INTENT:
      Integer num = (Integer) request.getParameter(NUMBER_ARGUMENT);
      rb.add("You said " + num).endConversation();
      break;
  }
  return rb.build();
}

मेल नहीं खाने वाला दोबारा प्रॉम्प्ट

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

जब किसी उपयोगकर्ता का जवाब आपकी कार्रवाई के ट्रेनिंग वाक्यांशों से मेल नहीं खाता है, तो Google Assistant, इनपुट को हैंडल करने की कोशिश करती है. इस तरह से लोगों के लिए, बातचीत के बीच में की जाने वाली कार्रवाइयां. उदाहरण के लिए, कोई व्यक्ति पूछता है, "कौनसी फ़िल्में क्या इस हफ़्ते खेल रहे हैं?" और फिर बातचीत के दौरान संदर्भ बदल देता है: " कल मौसम कैसा रहेगा?" इस उदाहरण में, "कल का मौसम कैसा रहेगा?" शुरुआती प्रॉम्प्ट से ट्रिगर हुई बातचीत का मान्य जवाब नहीं है, Assistant, मैच के नतीजे अपने-आप मैनेज करने की कोशिश करती है और उपयोगकर्ता को सही बातचीत शामिल करें.

अगर Assistant को उपयोगकर्ता के इनपुट से मेल खाने वाली कार्रवाई नहीं मिलती, उपयोगकर्ता को आपकी सेट की गई कार्रवाई के कॉन्टेक्स्ट में वापस भेजा जाता है.

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

फ़ॉलबैक इंटेंट बनाने के लिए:

  1. Dialogflow के नेविगेशन मेन्यू में इंटेंट पर क्लिक करें.
  2. इंटेंट बनाएं के बगल में मौजूद ⋮ पर क्लिक करें और चुनें फ़ॉलबैक इंटेंट बनाएं. (वैकल्पिक रूप से, डिफ़ॉल्ट फ़ॉलबैक इंटेंट में बदलाव करने की ज़रूरत नहीं है.)
  3. उपयोगकर्ताओं से बात करने के लिए दोहराए जाने वाले वाक्यांश बताएं. ये वाक्यांश बातचीत के दौरान बनाए गए हों और उपयोगकर्ता के मौजूदा संदर्भ के लिए जितना हो सके उतना उपयोगी हों.

    ग्राहक को आइटम भेजे बिना ऐसा करने के लिए: जवाब वाले हिस्से में वाक्यांश बताएं इंटेंट के आधार पर. डायलॉग बॉक्स, बोलने के लिए इस सूची में से किसी भी क्रम में वाक्यांश चुनता है उपयोगकर्ताओं को तब तक वापस दें, जब तक कोई खास इंटेंट ट्रिगर न हो.

    ग्राहक को आइटम भेजने के लिए:

    1. इंटेंट के ग्राहक को आइटम भेजना सेक्शन में जाकर, इस इंटेंट के लिए वेबहुक कॉल चालू करें को टॉगल करें.
    2. फ़ुलफ़िलमेंट लॉजिक में, किसी दूसरे की तरह फ़ॉलबैक इंटेंट को हैंडल करें इंटेंट, जैसा कि अनुरोधों को हैंडल करने के लिए फ़ंक्शन बनाएं में बताया गया है सेक्शन में जाएं.

    उदाहरण के लिए, नीचे दिया गया फ़ंक्शन conv.data ऑब्जेक्ट (किसी डेटा पेलोड (जिसका इस्तेमाल स्थिति बनाए रखने के लिए किया जा सकता है) के बजाय Node.js क्लाइंट लाइब्रेरी का इस्तेमाल करके काउंटर की मदद से यह ट्रैक किया जा सकता है कि फ़ॉलबैक इंटेंट कितनी बार ट्रिगर हुआ. अगर यह है एक से ज़्यादा बार ट्रिगर होने पर, कार्रवाई बंद हो जाती है. हालांकि, यह है, तो आपको अन्य इंटेंट पर इस काउंटर को 0 पर रीसेट करने चाहिए जब नॉन-फ़ॉलबैक इंटेंट ट्रिगर होता है. (देखें. नंबर जीनी सैंपल देखें.)

    Node.js
    app.intent('Default Fallback Intent', (conv) => {
     conv.data.fallbackCount++;
     // Provide two prompts before ending game
     if (conv.data.fallbackCount === 1) {
       conv.contexts.set(DONE_YES_NO_CONTEXT, 5);
       conv.ask('Are you done playing Number Genie?');
     } else {
       conv.close(`Since I'm still having trouble, so I'll stop here. ` +
         `Let's play again soon.`);
     }
    });
    जावा
    @ForIntent("Default Fallback Intent")
    public ActionResponse defaultFallback(ActionRequest request) {
      final String DONE_YES_NO_CONTEXT = "done_yes_no_context";
      ResponseBuilder rb = getResponseBuilder(request);
    
      int fallbackCount =
          request.getConversationData().get("fallbackCount") == null
              ? 0
              : (Integer) request.getConversationData().get("fallbackCount");
      fallbackCount++;
      request.getConversationData().put("fallbackCount", fallbackCount);
    
      if (fallbackCount == 1) {
        rb.add(new ActionContext(DONE_YES_NO_CONTEXT, 5));
        rb.add("Are you done playing Number Genie?");
      } else {
        rb.add("Since I'm still having trouble, so I'll stop here. Let's play again soon")
            .endConversation();
      }
      return rb.build();
    }

कॉन्टेक्स्ट का इस्तेमाल करना

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

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

    • उपयोगकर्ता के मौजूदा संदर्भ, इंटेंट.
    • कोई दूसरा इंटेंट मैच नहीं करता है.

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

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

ज़्यादा जानकारी के लिए, Dialogflow के कॉन्टेक्स्ट देखें.

बिना इनपुट फिर से प्रॉम्प्ट

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