बातचीत में डेटा सेव करें (Dialogflow)

Dialogflow में जानें

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

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

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

डेटा इस बात पर निर्भर करता है कि आपको बातचीत में डेटा सेव करना है या बातचीत के दौरान. किसी बातचीत में डेटा सेव करने के लिए, अपने AppResponse ऑब्जेक्ट के conversationToken फ़ील्ड का इस्तेमाल करें.

सभी बातचीत का डेटा सेव करने के लिए, यह तरीका अपनाएं:

  1. यह पता करें कि उपयोगकर्ता की पुष्टि हो चुकी है या वह मेहमान है.
  2. अपने AppResponse ऑब्जेक्ट के userStorage फ़ील्ड का इस्तेमाल करके, उपयोगकर्ता का डेटा सेव या ऐक्सेस करें.

बातचीत के अलग-अलग मोड़ के बीच डेटा सेव करना

conversationToken फ़ील्ड एक स्ट्रिंग है जिसमें एक ओपेक टोकन होता है. यह टोकन, कार्रवाई के दौरान हुई बातचीत के हर बार बदलने पर भेजा जाता है. उदाहरण के लिए, अगर आपने बातचीत के पहले मोड़ के लिए अपने AppResponse की वैल्यू को "count=1" पर सेट किया है, तो बातचीत के दूसरे मोड़ के लिए आपकी सेट की गई कार्रवाई को मिले AppRequest में उसके conversationToken में "count=1" शामिल है.

टोकन में हमेशा बातचीत की शुरुआत में खाली स्ट्रिंग से इनिशल किया जाता है. अगर Actions on Google Node.js क्लाइंट लाइब्रेरी का इस्तेमाल किया जाता है, तो conv.data का इस्तेमाल करके, बातचीत वाले टोकन की मदद से JSON ऑब्जेक्ट के तौर पर इंटरफ़ेस किया जा सकता है. यहां conv, Conversation का इंस्टेंस है.

नीचे दिए गए सैंपल में, AppResponse के conversationToken फ़ील्ड में काउंटर को सेव करने का तरीका बताया गया है:

Node.js

conv.data.firstNum = firstNum;
conv.ask(`Got it, the first number is ${firstNum}.`);
conv.ask(`What's the second number?`);

Java

ResponseBuilder responseBuilder = getResponseBuilder(request);
responseBuilder.getConversationData().put("firstNum", firstNum);
responseBuilder.add("Got it, the first number is " + firstNum + ".");
responseBuilder.add("What's the second number?");
return responseBuilder.build();

JSON

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

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Got it, the first number is 23."
            }
          },
          {
            "simpleResponse": {
              "textToSpeech": "What's the second number?"
            }
          }
        ]
      }
    }
  },
  "outputContexts": [
    {
      "name": "projects/save-data-df-js/agent/sessions/ABwppHGfFkWJdHKPpBEYiGkhdoakWmYj_2sZa4o8pbGG9nj4q5_GfDTtNEXOY34mLX8G4o_d7oZdUW9bnBZC/contexts/_actions_on_google",
      "lifespanCount": 99,
      "parameters": {
        "data": "{\"firstNum\":23}"
      }
    }
  ]
}

JSON

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

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Got it, the first number is 23."
              }
            },
            {
              "simpleResponse": {
                "textToSpeech": "What's the second number?"
              }
            }
          ]
        }
      }
    }
  ],
  "conversationToken": "{\"data\":{\"firstNum\":23}}"
}

व्यावहारिक इस्तेमाल के उदाहरण के लिए, हमारी मददगार सुझाव दें और ग्रेसफ़ुल तरीके से जवाब न दें सबसे सही तरीके बताने वाली गाइड देखें.

सभी बातचीत का डेटा सेव करना

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

उपयोगकर्ता की पुष्टि की स्थिति तय और मैनेज करना

उपयोगकर्ता की पुष्टि की स्थिति की वैल्यू GUEST या VERIFIED हो सकती है. हर बातचीत की शुरुआत में, Actions on Google बातचीत शुरू होते ही कई तरह के संकेतों के आधार पर उपयोगकर्ता की पुष्टि की स्थिति सेट करता है. एक उदाहरण के तौर पर, किसी उपयोगकर्ता ने अपने मोबाइल डिवाइस पर Google Assistant में लॉग इन किया है, तो उसकी पुष्टि की स्थिति VERIFIED है.

उपयोगकर्ता के पास, GUEST की पुष्टि की स्थिति दिखने की ये वजहें हो सकती हैं:

  • उपयोगकर्ता ने निजी खोज नतीजे पाने की सुविधा बंद की हो.
  • उपयोगकर्ता ने अपनी वेब और ऐप्लिकेशन गतिविधि बंद कर दी है. ध्यान रखें कि कुछ उपयोगकर्ताओं के लिए, डोमेन लेवल पर यह सेटिंग बंद हो सकती है.
  • अगर किसी डिवाइस पर वॉइस मैच की सुविधा चालू है और मैच नहीं हो पाता या उपयोगकर्ता अपनी आवाज़ का इस्तेमाल किए बिना ही Assistant को चालू कर देता है (जैसे, Google Home को दबाकर रखना).
  • उपयोगकर्ता ने साइन इन नहीं किया है.

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

अगर Node.js के लिए Actions On Google क्लाइंट लाइब्रेरी का इस्तेमाल करते हैं, तो conv.user.storage का इस्तेमाल करके, यूज़र स्टोरेज को JSON ऑब्जेक्ट के तौर पर इंटरफ़ेस के तौर पर इस्तेमाल किया जा सकता है. यहां conv, Conversation का एक इंस्टेंस है. नीचे दिए गए सैंपल में, आपके AppResponse के userStorage फ़ील्ड में काउंटर को सेव करने का तरीका बताया गया है:

Node.js

app.intent('Save Sum', (conv) => {
  if (conv.user.verification === 'VERIFIED') {
    conv.user.storage.sum = conv.data.sum;
    conv.close(`Alright, I'll store that for next time. See you then.`);
  } else {
    conv.close(`I can't save that right now, but we can add ` +
      `new numbers next time!`);
  }
});

Java

@ForIntent("Save Sum")
public ActionResponse saveSum(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  Integer sum = ((Double) request.getConversationData().get("sum")).intValue();
  String verificationStatus = request.getUser().getUserVerificationStatus();
  if (verificationStatus.equals("VERIFIED")) {
    responseBuilder.getUserStorage().put("sum", sum);
    responseBuilder.add("Alright, I'll store that for next time. See you then.");
  } else {
    responseBuilder.add("I can't save that right now, but we can add new numbers next time!");
  }
  responseBuilder.endConversation();
  return responseBuilder.build();
}

Node.js

if (conv.user.verification === 'VERIFIED') {
  conv.user.storage.sum = conv.data.sum;
  conv.close(`Alright, I'll store that for next time. See you then.`);
} else {
  conv.close(`I can't save that right now, but we can add ` +
    `new numbers next time!`);
}

Java

ResponseBuilder responseBuilder = getResponseBuilder(request);
Integer sum = ((Double) request.getConversationData().get("sum")).intValue();
String verificationStatus = request.getUser().getUserVerificationStatus();
if (verificationStatus.equals("VERIFIED")) {
  responseBuilder.getUserStorage().put("sum", sum);
  responseBuilder.add("Alright, I'll store that for next time. See you then.");
} else {
  responseBuilder.add("I can't save that right now, but we can add new numbers next time!");
}
responseBuilder.endConversation();
return responseBuilder.build();

JSON

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

{
  "payload": {
    "google": {
      "expectUserResponse": false,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Alright, I'll store that for next time. See you then."
            }
          }
        ]
      },
      "userStorage": "{\"data\":{\"sum\":68}}"
    }
  }
}

JSON

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

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "simpleResponse": {
            "textToSpeech": "Alright, I'll store that for next time. See you then."
          }
        }
      ]
    }
  },
  "conversationToken": "{\"data\":{\"firstNum\":23,\"sum\":68}}",
  "userStorage": "{\"data\":{\"sum\":68}}"
}

उपयोगकर्ता की पसंद के साथ बातचीत को अपने हिसाब से बनाएं सबसे सही तरीके वाली गाइड देखें. इससे आपको व्यावहारिक इस्तेमाल के उदाहरण मिलेंगे.

कानूनी नोट: userStorage को ऐक्सेस करने से पहले सहमति लेना. कुछ देशों में ऐसे नियम हैं जिनके तहत डेवलपर को userStorage में कुछ खास जानकारी (जैसे कि निजी जानकारी) को ऐक्सेस करने या सेव करने से पहले उपयोगकर्ता से सहमति लेनी होती है. अगर इनमें से किसी देश में काम किया जाता है और आपको इस जानकारी को ऐक्सेस करना है या उसे userStorage में सेव करना है, तो आपको पुष्टि करने के लिए हेल्पर का इस्तेमाल करना होगा. इससे लोगों से सहमति लेने और उनकी सहमति लेने के बाद ही, userStorage में इस तरह की जानकारी सेव की जा सकेगी.

उपयोगकर्ता के लिए, स्टोरेज की समयसीमा खत्म होने की तारीख

जब Assistant, उपयोगकर्ता से किसी पहचान का मिलान कर सकती है, तो userStorage के कॉन्टेंट को कभी भी ऐक्सेस नहीं किया जा सकता. साथ ही, इसे सिर्फ़ उपयोगकर्ता या कार्रवाई ही मिटा सकती है.

जब Assistant, उपयोगकर्ता से किसी पहचान का मिलान नहीं कर पाती, तो बातचीत के आखिर में userStorage का कॉन्टेंट मिटा दिया जाता है. यहाँ कुछ ऐसे उदाहरण दिए गए हैं जिनमें Assistant, उपयोगकर्ता की पहचान को मैच नहीं कर पाती:

  • वॉइस मैच की सुविधा सेट अप हो गई है और इससे मिलता-जुलता कोई नतीजा नहीं मिला.
  • उपयोगकर्ता ने निजी डेटा बंद कर दिया है.

userStorage फ़ील्ड की सामग्री साफ़ करें

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

अगर Node.js के लिए Actions On Google क्लाइंट लाइब्रेरी का इस्तेमाल किया जा रहा है, तो सिर्फ़ conv.user.storage की वैल्यू को {} (खाली ऑब्जेक्ट) पर सेट किया जा सकता है.

Node.js

app.intent('Forget Number', (conv) => {
  conv.user.storage = {};
  conv.ask(`Alright, I forgot your last result.`);
  conv.ask(`Let's add two new numbers. What is the first number?`);
});

Java

@ForIntent("Forget Number")
public ActionResponse forgetNumber(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  responseBuilder.getUserStorage().clear();
  responseBuilder.add("Alright, I forgot your last result.");
  responseBuilder.add("Let's add two new numbers. What is the first number?");
  return responseBuilder.build();
}

Node.js

conv.user.storage = {};
conv.ask(`Alright, I forgot your last result.`);
conv.ask(`Let's add two new numbers. What is the first number?`);

Java

ResponseBuilder responseBuilder = getResponseBuilder(request);
responseBuilder.getUserStorage().clear();
responseBuilder.add("Alright, I forgot your last result.");
responseBuilder.add("Let's add two new numbers. What is the first number?");
return responseBuilder.build();

JSON

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

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Alright, I forgot your last result."
            }
          },
          {
            "simpleResponse": {
              "textToSpeech": "Let's add two new numbers. What is the first number?"
            }
          }
        ]
      },
      "userStorage": "{\"data\":{}}"
    }
  }
}

JSON

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

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Alright, I forgot your last result."
              }
            },
            {
              "simpleResponse": {
                "textToSpeech": "Let's add two new numbers. What is the first number?"
              }
            }
          ]
        }
      }
    }
  ],
  "userStorage": "{\"data\":{}}"
}

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

  1. अपने फ़ोन पर Assistant ऐप्लिकेशन खोलें.
  2. ड्रॉवर आइकॉन पर टैप करें.

  3. एक्सप्लोर करें टैब में, वह कार्रवाई ढूंढें जिसके लिए उपयोगकर्ता स्टोरेज देखना या खाली करना है. इसके बाद, ज़्यादा जानकारी वाला पेज खोलने के लिए, उस कार्रवाई पर टैप करें.
  4. स्क्रोल करके, पेज पर सबसे नीचे जाएं.
    • userStorage फ़ील्ड का कॉन्टेंट देखने के लिए, [सेव किया गया डेटा देखें] पर टैप करें.
    • उपयोगकर्ता का सेव किया गया डेटा हटाने के लिए, मुझे याद रखने से $action की सुविधा बंद करें पर टैप करें.