चूंकि मैं डायलॉगफ्लो कोडिंग में नया हूं, मेरे पास कंसोल डायलॉगफ्लो में बनाए गए इरादों से संबंधित कुछ प्रश्न हैं।

1) अगर मैं डायलॉगफ्लो कंसोल में एक इरादा "इरादा 1" बनाता हूं, तो क्या इस इरादे को फायरबेस कार्यों में कॉल करना संभव है? यदि हां, तो यह कैसे करें?

2) टाइप करने के बजाय उपयोगकर्ता को विकल्पों का चयन करने के लिए कैसे बनाया जाए? इसके लिए मुझे क्या उपयोग करना है?

3) जब भी यूजर टाइप नंबर को कॉल करने के लिए इंटेंट को कॉन्फ़िगर कैसे करें?

4) इकाई, घटनाओं और क्रिया और मापदंडों का उद्देश्य क्या है?

0
Thirumani 5 जून 2018, 07:24

2 जवाब

सबसे बढ़िया उत्तर

मैं अभी भी Actions on Google प्रोग्रामिंग के लिए कुछ नया हूँ, लेकिन यहाँ मेरी समझ है।

डायलॉगफ़्लो आपको इरादों को परिभाषित करने की अनुमति देता है। फिर आप उन इरादों को लागू करने के लिए कोड को परिभाषित कर सकते हैं। कंसोल Google क्लाउड फ़ंक्शंस के लिए एक इनलाइन जावास्क्रिप्ट संपादक प्रदान करता है। आप Google क्लाउड फ़ंक्शंस कंसोल पर जा सकते हैं और वहां कोड देख सकते हैं। या यदि आप अधिक जटिल कोड परिनियोजित करना चाहते हैं तो आप इसे "वेब पूर्ति" पर फ़्लिप कर सकते हैं (उदाहरण के लिए जावास्क्रिप्ट को कई फाइलों में विभाजित करें - अंतर्निहित संपादक केवल एक index.js फ़ाइल के साथ काम करता है)।

तो डायलॉगफ्लो मानव इनपुट लेता है (एक वाक्यांश जो वे कहते हैं), विभिन्न उद्देश्यों के लिए वाक्यांशों के प्रशिक्षण सेट को देखता है, और जो सोचता है वह सही है। यह तब उस इरादे के पूर्ति कोड को आमंत्रित करता है (जहां कोड फायरबेस में संग्रहीत होता है)। तो जब आप पूछते हैं "क्या इस इरादे को फ़ायरबेस फ़ंक्शंस में कॉल करना संभव है" जो थोड़े पीछे की ओर महसूस करता है। इरादे उपयोगकर्ता के बीच कुछ कहने और फायरबेस फ़ंक्शन (HTTP के माध्यम से) को कॉल करने के बीच गोंद हैं। इरादे अपने आप में कोड नहीं हैं जिन्हें कहा जा सकता है।

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

तो आपका तीसरा प्रश्न (जब भी उपयोगकर्ता कोई संख्या टाइप करता है तो कॉल करने के इरादे को कैसे कॉन्फ़िगर करें), आपका एप्लिकेशन डिफ़ॉल्ट "स्वागत" इरादे (प्रारंभिक बिंदु) से शुरू होने जैसा कुछ कर सकता है। आप मौखिक रूप से मेनू विकल्प कहेंगे "एक होमवेयर के लिए, दो कपड़ों के लिए, तीन जूते के लिए, ..."। फिर आपको मेनू में उपयोगकर्ता की स्थिति याद आती है। फिर आप "एक" को एक इरादे के रूप में तार करते हैं, और क्लाउड फ़ंक्शन में यह जांच करेगा कि उपयोगकर्ता किस मेनू पर निर्भर था, इसलिए "स्वागत इरादे के बाद, 'एक' का अर्थ होमवेयर" होगा। ऐप फिर दूसरा प्रश्न पूछ सकता है जैसे "फर्नीचर के लिए एक, फूलदान के लिए दो, डिस्को गेंदों के लिए तीन, ..."। यदि वे फिर से 'एक' कहते हैं, तो यह उसी इरादे पर जाएगा, लेकिन आपके ऐप ने एक चर को सहेज लिया होगा जहां उपयोगकर्ता मेनू पेड़ में है।

निकाय आपको शब्दों की शब्दावली को परिभाषित करने की अनुमति देते हैं। उदा. "मैं एक ${color} ${thing} खरीदना चाहता हूँ"। आप "लाल", "हरा", "नीला" आदि मानों के साथ एक रंग इकाई को परिभाषित कर सकते हैं। आप "पोशाक", "टोपी", "जूते" आदि की दूसरी चीज़ इकाई को परिभाषित कर सकते हैं। आशय प्रशिक्षण वाक्यांश "मैं" हो सकता है एक लाल पोशाक खरीदना चाहते हैं"। डायलॉगफ्लो को "लाल" बताया जा सकता है कि प्रशिक्षण वाक्य एक "रंग" इकाई है, और "पोशाक" एक "चीज" इकाई है। इन मानों को तब कार्यान्वयन का समर्थन करने वाली वेब सेवा के पैरामीटर के रूप में पारित किया जाता है - यानी, आपके "खरीदने" के इरादे को "रंग" और "चीज़" पैरामीटर मिलेगा।

ईवेंट उपयोगकर्ता इनपुट ट्रिगर के बजाय सिस्टम द्वारा उत्पन्न ट्रिगर होते हैं। उदाहरण के लिए आपके ऐप को शुरू करने का "स्वागत" इरादा एक सिस्टम जेनरेट इवेंट है। एक अन्य ईवेंट का उपयोग तब किया जाता है जब कोई ऐप एक डिवाइस से दूसरे डिवाइस पर जाता है। यदि आप पुश नोटिफिकेशन का उपयोग शुरू करने की अनुमति मांगते हैं तो अन्य सिस्टम ईवेंट हैं। यदि कुछ होता है तो यह आपके कोड को चलाने का एक तरीका है (न कि जब कोई उपयोगकर्ता कुछ कहता है)।

मुझे आशा है कि वह मदद करेंगे!

2
Alan Kent 5 जून 2018, 09:34

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

const dialogflow = require('dialogflow');
const sessionClient = new dialogflow.SessionsClient();
// Define session path
const sessionPath = sessionClient.sessionPath(projectId, sessionId);

const r_text = "What's the weather like in Rio de Janeiro?"

// The text query request.
const request = {
  "session": sessionPath,
  "queryParams": {
    "payload": payload
  },
  "queryInput": {
    "text": {
      "text": r_text,
      "languageCode": languageCode,
    },
  },
};

return sessionClient
.detectIntent(request)
.then(responses => {
  console.log('Detected intent');
  const result = responses[0].queryResult;
  ...do stuff with responses...
  return Promise.resolve('Resolved intent');
})
if (result.intent) {
  console.log(`  Intent: ${result.intent.displayName}`);
  return Promise.resolve('Resolved intent');
} else {
  console.log(`  No intent matched.`);
  return Promise.resolve('Not resolved intent');
}

साथ ही, अपने पेलोड को परिभाषित करते समय, थोड़ा परेशान करने वाले बग से अवगत रहें (जिसने मुझे कुछ दिन खर्च किए हैं) और अपने JSON को उस संरचना में परिवर्तित करें जिसे API प्राप्त करने की अपेक्षा करता है:

const payload = structjson.jsonToStructProto({
  "user": userId,
  "location": r_location,
  "timestamp": r_timestamp,
  "sender": r_sender
})

आप Google के रेपो पर structjson लाइब्रेरी पा सकते हैं।

0
InquisitiveCrow 2 अक्टूबर 2018, 07:57