कार्रवाइयां बनाने में आपको ज़्यादा आसानी के लिए, दूसरों को एचटीटीपीएस वेब सेवाओं (ग्राहक को आइटम भेजने की सेवा) के लिए. आपकी कार्रवाइयाँ, वेबहुक को ट्रिगर कर सकती हैं. एचटीटीपीएस एंडपॉइंट को अनुरोध भेजने का विकल्प होता है. ये तरीके इस्तेमाल किए जा सकते हैं ग्राहक को आइटम भेजने के लिए इनमें से कोई एक विकल्प चुना गया है:
- उपयोगकर्ता से मिली जानकारी के आधार पर, डाइनैमिक प्रॉम्प्ट जनरेट किया जा रहा है.
- किसी बाहरी सिस्टम में ऑर्डर देना और सफल होने की पुष्टि करना.
- बैकएंड डेटा के साथ स्लॉट की पुष्टि की जा रही है.
वेबहुक ट्रिगर और हैंडलर
आपकी सेट की गई कार्रवाइयां, शुरू करने के इंटेंट या सीन के अंदर ही वेबहुक को ट्रिगर कर सकती हैं. आपके फ़ुलफ़िलमेंट एंडपॉइंट पर एक अनुरोध भेजता है. ग्राहक के आइटम में वेबहुक शामिल है हैंडलर जो अनुरोध में JSON पेलोड को प्रोसेस करते हैं. आप वेबहुक को ट्रिगर कर सकते हैं है:
- शुरू करने के इंटेंट से मेल खाने के बाद
- सीन के अंदर जाने के दौरान
- किसी सीन के स्थिति स्टेज में, किसी शर्त के सही होने के बाद
- सीन में स्लॉट भरने वाले स्टेज के दौरान
- सीन के इनपुट स्टेज में इंटेंट मैच होने के बाद
कार्रवाइयों में वेबहुक ट्रिगर करने पर, Google Assistant एक अनुरोध भेजती है JSON पेलोड के साथ भेजना होगा, जिसमें इवेंट को प्रोसेस करने के लिए हैंडलर का नाम. आपका फ़ुलफ़िलमेंट एंडपॉइंट ये काम कर सकता है: लॉजिक को लागू करने के लिए इवेंट को सही हैंडलर पर ले जा सकता है और JSON पेलोड के साथ रिस्पॉन्स.
पेलोड
नीचे दिए गए स्निपेट, उन अनुरोधों के उदाहरण दिखाते हैं जिन्हें आपकी कार्रवाइयां भेजी जाती हैं ग्राहक को आइटम भेजने के साथ ही, उसका जवाब भी भेजा जाता है. ज़्यादा जानकारी के लिए, रेफ़रंस दस्तावेज़ के बारे में ज़्यादा जानकारी जानकारी.
अनुरोध का उदाहरण
{
"handler": {
"name": "handler_name"
},
"intent": {
"name": "actions.intent.MAIN",
"params": {},
"query": ""
},
"scene": {
"name": "SceneName",
"slotFillingStatus": "UNSPECIFIED",
"slots": {}
},
"session": {
"id": "example_session_id",
"params": {},
"typeOverrides": []
},
"user": {
"locale": "en-US",
"params": {
"verificationStatus": "VERIFIED"
}
},
"home": {
"params": {}
},
"device": {
"capabilities": [
"SPEECH",
"RICH_RESPONSE",
"LONG_FORM_AUDIO"
]
}
}
रिस्पॉन्स का उदाहरण
{
"session": {
"id": "example_session_id",
"params": {}
},
"prompt": {
"override": false,
"firstSimple": {
"speech": "Hello World.",
"text": ""
}
},
"scene": {
"name": "SceneName",
"slots": {},
"next": {
"name": "actions.scene.END_CONVERSATION"
}
}
}
रनटाइम इंटरैक्शन
नीचे दिए सेक्शन में ऐसे सामान्य कामों के बारे में बताया गया है जिन्हें अपने वेबहुक हैंडलर.
प्रॉम्प्ट भेजें
आसान टेक्स्ट, रिच टेक्स्ट, कार्ड, और यहां तक कि फ़ुल-ब्लर की मदद से भी प्रॉम्प्ट बनाए जा सकते हैं एचटीएमएल प्रॉम्प्ट, जो इंटरैक्टिव कैनवस वाले वेब ऐप्लिकेशन पर काम करते हैं. प्रॉम्प्ट वाले दस्तावेज़ में वेबहुक इवेंट को मैनेज करते समय प्रॉम्प्ट बनाने के तरीके के बारे में पूरी जानकारी. नीचे दिए गए स्निपेट, कार्ड का प्रॉम्प्ट दिखाते हैं:
Node.js
app.handle('rich_response', conv => {
conv.add('This is a card rich response.');
conv.add(new Card({
title: 'Card Title',
subtitle: 'Card Subtitle',
text: 'Card Content',
image: new Image({
url: 'https://developers.google.com/assistant/assistant_96.png',
alt: 'Google Assistant logo'
})
}));
});
JSON में जवाब दिया गया
{
"session": {
"id": "example_session_id",
"params": {}
},
"prompt": {
"override": false,
"content": {
"card": {
"title": "Card Title",
"subtitle": "Card Subtitle",
"text": "Card Content",
"image": {
"alt": "Google Assistant logo",
"height": 0,
"url": "https://developers.google.com/assistant/assistant_96.png",
"width": 0
}
}
},
"firstSimple": {
"speech": "This is a card rich response.",
"text": ""
}
}
}
इंटेंट पैरामीटर पढ़ें
जब Assistant का रनटाइम किसी इंटेंट से मैच करता है, तो वह तय किए गए सभी इंटेंट को एक्सट्रैक्ट कर लेता है पैरामीटर का इस्तेमाल करें. मूल प्रॉपर्टी में वही जानकारी थी जिसे उपयोगकर्ता ने इनपुट के तौर पर दिया था और रिज़ॉल्व की गई प्रॉपर्टी वह होती है जिसके लिए एनएलयू ने इनपुट को रिज़ॉल्व किया. ऐसा एनएलयू ने स्पेसिफ़िकेशन.
Node.js
conv.intent.params['param_name'].original
conv.intent.params['param_name'].resolved
JSON का अनुरोध करें
{
"handler": {
"name": "handler_name"
},
"intent": {
"name": "intent_name",
"params": {
"slot_name": {
"original": "1",
"resolved": 1
}
},
"query": ""
},
"scene": {
"name": "SceneName",
"slotFillingStatus": "UNSPECIFIED",
"slots": {},
"next": {
"name": "actions.scene.END_CONVERSATION"
}
},
"session": {
"id": "session_id",
"params": {},
"typeOverrides": []
},
"user": {
"locale": "en-US",
"params": {
"verificationStatus": "VERIFIED"
}
},
"home": {
"params": {}
},
"device": {
"capabilities": [
"SPEECH",
"RICH_RESPONSE",
"LONG_FORM_AUDIO"
]
}
}
उपयोगकर्ता की स्थान-भाषा पढ़ें
यह वैल्यू, Google Assistant के लिए उपयोगकर्ता की स्थान-भाषा की सेटिंग के हिसाब से है.
Node.js
conv.user.locale
JSON
{
"handler": {
"name": "handler_name"
},
"intent": {
"name": "actions.intent.MAIN",
"params": {},
"query": ""
},
"scene": {
"name": "SceneName",
"slotFillingStatus": "UNSPECIFIED",
"slots": {}
},
"session": {
"id": "session_id",
"params": {},
"typeOverrides": []
},
"user": {
"locale": "en-US",
"params": {
"verificationStatus": "VERIFIED"
}
},
"home": {
"params": {}
},
"device": {
"capabilities": [
"SPEECH",
"RICH_RESPONSE",
"LONG_FORM_AUDIO"
]
}
}
डिवाइस का स्टोरेज पढ़ने और उसमें बदलाव करने की अनुमति
स्टोरेज पाने के तरीकों के बारे में पूरी जानकारी के लिए, स्टोरेज से जुड़ा दस्तावेज़ देखें स्टोरेज की सुविधाओं का इस्तेमाल करते हैं.
Node.js
//read
conv.session.params.key
conv.user.params.key
conv.home.params.key
// write
conv.session.params.key = value
conv.user.params.key = value
conv.home.params.key = value
JSON का अनुरोध करें
{
"handler": {
"name": "handler_name"
},
"intent": {
"name": "actions.intent.MAIN",
"params": {},
"query": ""
},
"scene": {
"name": "SceneName",
"slotFillingStatus": "UNSPECIFIED",
"slots": {}
},
"session": {
"id": "session_id",
"params": {
"key": "value"
},
"typeOverrides": [],
"languageCode": ""
},
"user": {
"locale": "en-US",
"params": {
"verificationStatus": "VERIFIED",
"key": "value"
}
},
"home": {
"params": {
"key": "value"
}
},
"device": {
"capabilities": [
"SPEECH",
"RICH_RESPONSE",
"LONG_FORM_AUDIO"
]
}
}
JSON में जवाब दिया गया
{
"session": {
"id": "session_id",
"params": {
"key": "value"
}
},
"prompt": {
"override": false,
"firstSimple": {
"speech": "Hello world.",
"text": ""
}
},
"user": {
"locale": "en-US",
"params": {
"verificationStatus": "VERIFIED",
"key": "value"
}
},
"home": {
"params": {
"key": "value"
}
}
}
डिवाइस की सुविधाओं को देखना
अलग-अलग अनुभव देने के लिए, डिवाइस की क्षमता की जांच करें या बातचीत का फ़्लो.
Node.js
const supportsRichResponse = conv.device.capabilities.includes("RICH_RESPONSE");
const supportsLongFormAudio = conv.device.capabilities.includes("LONG_FORM_AUDIO");
const supportsSpeech = conv.device.capabilities.includes("SPEECH");
const supportsInteractiveCanvas = conv.device.capabilities.includes("INTERACTIVE_CANVAS");
JSON का अनुरोध करें
{
"handler": {
"name": "handler_name"
},
"intent": {
"name": "actions.intent.MAIN",
"params": {},
"query": ""
},
"scene": {
"name": "SceneName",
"slotFillingStatus": "UNSPECIFIED",
"slots": {}
},
"session": {
"id": "session_id",
"params": {},
"typeOverrides": [],
"languageCode": ""
},
"user": {
"locale": "en-US",
"params": {
"verificationStatus": "VERIFIED"
}
},
"home": {
"params": {}
},
"device": {
"capabilities": [
"SPEECH",
"RICH_RESPONSE",
"LONG_FORM_AUDIO",
"INTERACTIVE_CANVAS"
]
}
}
सरफ़ेस की सुविधाओं की पूरी सूची के लिए, Capability
पर जाएं
संदर्भ.
रनटाइम टाइप में बदलाव
रनटाइम टाइप की मदद से, रनटाइम के दौरान टाइप की खास जानकारी में बदलाव किया जा सकता है. आप इसका इस्तेमाल कर सकते हैं सुविधा का इस्तेमाल करें, ताकि किसी टाइप की मान्य वैल्यू अपने-आप भरी जा सके. इसके लिए उदाहरण के लिए, किसी सर्वे में डाइनैमिक विकल्प जोड़ने के लिए, रनटाइम के टाइप में बदलाव करने का इस्तेमाल किया जा सकता है या मेन्यू में रोज़ का कोई आइटम जोड़ने के लिए.
रनटाइम टाइप का इस्तेमाल करने के लिए, आप अपनी कार्रवाई से एक वेबहुक ट्रिगर करते हैं.
हैंडलर को भी ट्रिगर किया जा सकता है. यहां से,
आपकी सेट की गई कार्रवाई के जवाब में session.typeOverrides
पैरामीटर. उपलब्ध है
मौजूदा टाइप की एंट्री या TYPE_REPLACE
को बनाए रखने के लिए, मोड में TYPE_MERGE
शामिल है
का इस्तेमाल करें.
Node.js
conv.session.typeOverrides = [{
name: type_name,
mode: 'TYPE_REPLACE',
synonym: {
entries: [
{
name: 'ITEM_1',
synonyms: ['Item 1', 'First item']
},
{
name: 'ITEM_2',
synonyms: ['Item 2', 'Second item']
},
{
name: 'ITEM_3',
synonyms: ['Item 3', 'Third item']
},
{
name: 'ITEM_4',
synonyms: ['Item 4', 'Fourth item']
},
]
}
}];
JSON में जवाब दिया गया
{
"session": {
"id": "session_id",
"params": {},
"typeOverrides": [
{
"name": "type_name",
"synonym": {
"entries": [
{
"name": "ITEM_1",
"synonyms": [
"Item 1",
"First item"
]
},
{
"name": "ITEM_2",
"synonyms": [
"Item 2",
"Second item"
]
},
{
"name": "ITEM_3",
"synonyms": [
"Item 3",
"Third item"
]
},
{
"name": "ITEM_4",
"synonyms": [
"Item 4",
"Fourth item"
]
}
]
},
"typeOverrideMode": "TYPE_REPLACE"
}
]
},
"prompt": {
"override": false,
"firstSimple": {
"speech": "This is an example prompt.",
"text": "This is an example prompt."
}
}
}
पक्षपात को बढ़ावा देना
स्पीच बायसिंग की मदद से, इंटेंट मैचिंग को बेहतर बनाने के लिए एनएलयू को संकेत दिए जा सकते हैं. आपने लोगों तक पहुंचाया मुफ़्त में 1000 एंट्री तक तय किए जा सकते हैं.
Node.js
conv.expected.speech = ['value_1', 'value_2']
conv.expected.language = 'locale_string'
JSON में जवाब दिया गया
{
"session": {
"id": "session_id",
"params": {}
},
"prompt": {
"override": false,
"firstSimple": {
"speech": "This is an example prompt.",
"text": "This is an example prompt."
}
},
"expected": {
"speech": "['value_1', 'value_2']",
"language": "locale_string"
}
}
ट्रांज़िशन सीन
अपने Actions प्रोजेक्ट में स्टैटिक ट्रांज़िशन तय करने के अलावा, इसकी वजह से, रनटाइम पर सीन ट्रांज़िशन होते हैं.
Node.js
app.handle('transition_to_hidden_scene', conv => {
// Dynamic transition
conv.scene.next.name = "HiddenScene";
});
JSON में जवाब दिया गया
{
"session": {
"id": "session_id",
"params": {}
},
"prompt": {
"override": false,
"firstSimple": {
"speech": "This is an example prompt.",
"text": ""
}
},
"scene": {
"name": "SceneName",
"slots": {},
"next": {
"name": "HiddenScene"
}
}
}
सीन के स्लॉट पढ़ें
स्लॉट भरने के दौरान, स्लॉट की पुष्टि करने के लिए फ़ुलफ़िलमेंट का इस्तेमाल किया जा सकता है. इसके अलावा,
स्लॉट भरने की स्थिति (SlotFillingStatus
).
Node.js
conv.scene.slotFillingStatus // FINAL means all slots are filled
conv.scene.slots // Object that contains all the slots
conv.scene.slots['slot_name'].<property_name> // Accessing a specific slot's properties
उदाहरण के लिए, मान लें कि आपको किसी जवाब से टाइम ज़ोन एक्सट्रैक्ट करना है. तय सीमा में
इस उदाहरण में, स्लॉट का नाम datetime1
है. टाइम ज़ोन जानने के लिए, आपको
इस्तेमाल करें:
conv.scene.slots['datetime1'].value.time_zone.id
JSON का अनुरोध करें
{
"handler": {
"name": "handler_name"
},
"intent": {
"name": "",
"params": {
"slot_name": {
"original": "1",
"resolved": 1
}
},
"query": ""
},
"scene": {
"name": "SceneName",
"slotFillingStatus": "FINAL",
"slots": {
"slot_name": {
"mode": "REQUIRED",
"status": "SLOT_UNSPECIFIED",
"updated": true,
"value": 1
}
},
"next": {
"name": "actions.scene.END_CONVERSATION"
}
},
"session": {
"id": "session_id",
"params": {
"slot_name": 1
},
"typeOverrides": []
},
"user": {
"locale": "en-US",
"params": {
"verificationStatus": "VERIFIED"
}
},
"home": {
"params": {}
},
"device": {
"capabilities": [
"SPEECH",
"RICH_RESPONSE",
"LONG_FORM_AUDIO"
]
}
}
सीन के स्लॉट अमान्य करें
स्लॉट को अमान्य करके, उपयोगकर्ताओं से नई वैल्यू उपलब्ध कराने के लिए कहा जा सकता है.
Node.js
conv.scene.slots['slot_name'].status = 'INVALID'
JSON में जवाब दिया गया
{
"session": {
"id": "session_id",
"params": {
"slot_name": 1
}
},
"prompt": {
"override": false,
"firstSimple": {
"speech": "This is an example prompt.",
"text": ""
}
},
"scene": {
"name": "SceneName",
"slots": {
"slot_name": {
"mode": "REQUIRED",
"status": "INVALID",
"updated": true,
"value": 1
}
},
"next": {
"name": "actions.scene.END_CONVERSATION"
}
}
}
डेवलपमेंट के विकल्प
Actions Builder, एक इनलाइन एडिटर की सुविधा देता है, जिसे Cloud Functions एडिटर कहा जाता है. इसकी मदद से, 'Firebase के लिए Cloud Function' बनाया और डिप्लॉय किया जा सकता है. इसके लिए कंसोल. अपनी पसंद की होस्टिंग सेवा पर, फ़ुलफ़िलमेंट को तैयार और डिप्लॉय किया जा सकता है और अपने एचटीटीपीएस फ़ुलफ़िलमेंट एंडपॉइंट को अपने वेबहुक हैंडलर के तौर पर रजिस्टर करें.
इनलाइन एडिटर
Cloud Functions एडिटर की मदद से डेवलप करने के लिए:
- फ़ाइल
sdk/webhooks/ActionsOnGoogleFulfillment.yaml
बनाएं, और आपके Action के लिए हैंडलर और इस्तेमाल किए गए इनलाइन क्लाउड फ़ंक्शन को तय करें ऑर्डर पूरा करने के लिए.handlers: - name: questionOnEnterFunc - name: fruitSlotValidationFunc inlineCloudFunction: executeFunction: ActionsOnGoogleFulfillment
sdk/webhooks/ActionsOnGoogleFulfillment
फ़ोल्डर बनाएं, और हैंडलर को लागू करने वालीindex.js
फ़ाइल जोड़ें पहले से तय है औरpackage.json
फ़ाइल, जो npm के बारे में बताती है आपके कोड की ज़रूरी शर्तें.// index.js const {conversation} = require('@assistant/conversation'); const functions = require('firebase-functions'); const app = conversation(); app.handle('questionOnEnterFunc', conv => { conv.add('questionOnEnterFunc triggered on webhook'); }); app.handle('fruitSlotValidationFunc', conv => { conv.add('fruitSlotValidationFunc triggered on webhook'); }); exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);
// package.json { "name": "ActionsOnGoogleFulfillment", "version": "0.1.0", "description": "Actions on Google fulfillment", "main": "index.js", "dependencies": { "@assistant/conversation": "^3.0.0", "firebase-admin": "^5.4.3", "firebase-functions": "^0.7.1" } }
एक्सटर्नल एचटीटीपीएस एंडपॉइंट
इस सेक्शन में, Firebase के लिए Cloud Functions सेट अप करने का तरीका आपकी बातचीत की कार्रवाई के लिए ग्राहक को आइटम भेजने की सेवा. हालांकि, आपके पास ये डिप्लॉय करने का विकल्प भी है आपकी पसंद की होस्टिंग सेवा को पूरा करना.
एनवायरमेंट सेट अप करें
हमारा सुझाव है कि जब Cloud फ़ंक्शन का इस्तेमाल इनके लिए किया जाए, तब हम इस प्रोजेक्ट स्ट्रक्चर का इस्तेमाल करें Firebase:
ProjectFolder - Root folder for the project sdk - Actions project configuration files functions - Cloud functions for Firebase files
अपना एनवायरमेंट सेट अप करने के लिए, यह तरीका अपनाएं:
- Node.js को डाउनलोड और इंस्टॉल करें.
Firebase सीएलआई सेट अप और शुरू करें. अगर नीचे दिया गया निर्देश इससे काम नहीं करता है
EACCES
की गड़बड़ी, तो शायद आपको npm अनुमतियां बदलनी पड़े.npm install -g firebase-tools
अपने Google खाते से Firebase टूल की पुष्टि करें:
firebase login
वह प्रोजेक्ट डायरेक्ट्री शुरू करें जिसमें आपने कार्रवाइयां प्रोजेक्ट सेव किया है. आपसे यह चुनने के लिए कहा जाएगा कि आपको Firebase सीएलआई की किन सुविधाओं को सेटअप करना है आपके Actions प्रोजेक्ट में.
Functions
और ऐसी अन्य सुविधाएं चुनें जो आपको पसंद आ सकती हैं इस्तेमाल करें, जैसे कि Firestore. इसके बाद, पुष्टि करने और जारी रखने के लिए, Enter दबाएं:$ cd <ACTIONS_PROJECT_DIRECTORY> $ firebase init
Firebase टूल को अपने कार्रवाई प्रोजेक्ट से जोड़ने के लिए इसका इस्तेमाल करके उसे चुनें प्रोजेक्ट की सूची पर नेविगेट करने के लिए, ऐरो बटन का इस्तेमाल करें:
प्रोजेक्ट चुनने के बाद, Firebase टूल फ़ंक्शन शुरू करता है सेटअप करता है और आपसे पूछता है कि आप किस भाषा का उपयोग करना चाहते हैं. तीर कुंजियों का इस्तेमाल करके चुनें और जारी रखने के लिए Enter दबाएं.
=== Functions Setup A functions directory will be created in your project with a Node.js package pre-configured. Functions can be deployed with firebase deploy. ? What language would you like to use to write Cloud Functions? (Use arrow keys) > JavaScript TypeScript
संभावित गड़बड़ियों का पता लगाने और स्टाइल लागू करने के लिए, ESLint का इस्तेमाल करके, Y या N टाइप करें:
? Do you want to use ESLint to catch probable bugs and enforce style? (Y/n)
प्रॉम्प्ट पर Y टाइप करके, प्रोजेक्ट डिपेंडेंसी पाएं:
? Do you want to install dependencies with npm now? (Y/n)
सेटअप पूरा होने के बाद, आपको कुछ मिलता-जुलता आउटपुट दिखेगा:
✔ Firebase initialization complete!
@assistant/conversation डिपेंडेंसी इंस्टॉल करें:
$ cd <ACTIONS_PROJECT_DIRECTORY>/functions $ npm install @assistant/conversation --save
फ़ुलफ़िलमेंट डिपेंडेंसी पाएं और फ़ुलफ़िलमेंट फ़ंक्शन को डिप्लॉय करें:
$ npm install $ firebase deploy --only functions
डिप्लॉयमेंट में कुछ मिनट लगते हैं. पूरा होने के बाद, आपको मिलता-जुलता आउटपुट दिखेगा को भी फ़ॉलो करते हैं. Dialogflow में जाने के लिए, आपको फ़ंक्शन यूआरएल की ज़रूरत होगी.
✔ Deploy complete!
Project Console: https://console.firebase.google.com/project/<PROJECT_ID>/overview Function URL (<FUNCTION_NAME>): https://us-central1-<PROJECT_ID>.cloudfunctions.net/<FUNCTION_NAME>अगले सेक्शन में इस्तेमाल करने के लिए, ऑर्डर पूरा करने का यूआरएल कॉपी करें.
वेबहुक हैंडलर रजिस्टर करें
sdk/webhooks/ActionsOnGoogleFulfillment.yaml
फ़ाइल बनाएं और तय करें कि आपकी कार्रवाई के हैंडलर और वेबहुक अनुरोधों के यूआरएल.httpsEndpoint: baseUrl: https://my.web.hook/ActionsOnGoogleFulfillment endpointApiVersion: 2 handlers: - name: questionOnEnterFunc - name: fruitSlotValidationFunc