5

यह एक आसान हो सकता है लेकिन मैं इसे दिनों में नहीं समझ पाया।एलेक्सा (अमेज़ॅन इको) वार्तालाप कौशल - सत्र गुणों का उपयोग (जावास्क्रिप्ट - एडब्ल्यूएस लैम्ब्डा)

मैं एलेक्सा को वार्तालाप करना चाहता हूं, जैसे;

>> एलेक्सा, testSkill शुरू करें।

ए: टेस्ट कौशल शुरू हुआ। मुझे एक नंबर बताओ।

>> एक।

ए: ठीक है, अब मुझे एक रंग बताओ।

>> नीला।

ए: और अंत में, मुझे एक पशु नाम बताएं।

>> चिकन।

उत्तर: आप मुझे एक, नीले और चिकन कहा था।

मुझे पता चला कि मुझे कौशल के सत्र गुणों को संभालना है, जो एक JSON है और इरादों के बीच जानकारी स्थानांतरित करता है।

मैं इस तरह के कार्यों का उपयोग करता हूं;

function testConversation(intent, session, callback) { 

    var cardTitle = intent.name; 
    var repromptText = ""; 
    var sessionAttributes = { // I don't know how to handle this 
     nameOfPairOne: "", 
     nameOfPairTwo: "", 
    }; 
    var shouldEndSession = false; 
    var speechOutput = ""; 

    var color= convertToASCII(intent.slots.color.value); 
    sessionAttributes.nameOfPairOne = color; 

    speechOutput = "You said "+sessionAttributes.nameOfPairOne+". Please say another thing. "; 
    callback(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession)); 
} 

function testConversation2(intent, session, callback) { 

    var cardTitle = intent.name; 
    var repromptText = ""; 
    var sessionAttributes = session.attributes; 
    var shouldEndSession = false; 
    var speechOutput = ""; 

    var number = convertToASCII(intent.slots.number.value); 
    sessionAttributes.nameOfPairTwo = number; 

    speechOutput = "You first said "+sessionAttributes.nameOfPairOne+", and now said "+sessionAttributes.nameOfPairTwo; 
    callback(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession)); 
} 

//------Helpers that build all of the responses ---------// 
function buildSpeechletResponse(title, output, repromptText, shouldEndSession) { 
    return { 
     outputSpeech: {type: "PlainText", text: output}, 
     card: {type: "Simple", title: "SessionSpeechlet - " + title, content: "SessionSpeechlet - " + output}, 
     reprompt: {outputSpeech: {type: "PlainText", text: repromptText}}, 
     shouldEndSession: shouldEndSession 
    }; 
} 


function buildResponse(sessionAttributes, speechletResponse) { 
    return {version: "1.0", sessionAttributes: sessionAttributes, response: speechletResponse}; 
} 

ऑनेंटेंट() फ़ंक्शन से कोड का एक टुकड़ा जहां मैं उपर्युक्त कार्यों को कॉल करता हूं। (मुझे पता है कि यह गलत है लेकिन सही तरीके से पता नहीं लगा सका)

else if ("getColorNum" == intentName) { 
    if (session.attributes.nameOfPairOne === "") { 
     testConversation(intent, session, callback); 
    } else { 
     testConversation2(intent, session, callback); 
    } 
} 

और इरादा स्कीमा JSON ऐसा ही है;

"intents": [ 
{ 
    "intent": "getColorNum", 
    "slots": [ 
    { 
     "name": "Color", 
     "type": "ColorSlot" 
    }, 
    { 
     "name": "Number", 
     "type": "NumberSlot" 
    } 
    ] 
} 

] }

तो, मैं चीजों की सब गलत कर रहा हूँ? गलती कहां है? और, मैंने एक वार्तालाप कैसे बनाया जैसे मैंने उल्लेख किया? अब से धन्यवाद

+0

Sooo इच्छा है कि कोई इसका उत्तर देगा। इस बीच, एक समान प्रश्न में मेरे शोध ने इसे बदल दिया, जो कुछ मदद की हो सकती है: http://lovemyecho.com/wp-content/uploads/2015/07/SessionAttributesInJavascript.pdf – brianfit

उत्तर

2

चूंकि किसी ने आपको कोई जवाब नहीं दिया है, मैंने सोचा कि मैं आपको अपना दो सेंट दूंगा। मेरी पसंद की भाषा पायथन है लेकिन मैं आपको कुछ उच्च स्तरीय विचार दे सकता हूं।

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

आप देखना चाहते हैं कि मैं इन कार्यान्वित चाहते हैं, बाहर की जाँच:

+0

आपके उत्तर के लिए धन्यवाद, बीटीडब्ल्यू I एलेक्स-एसडीके एनपीएम मॉड्यूल के साथ समस्या का पता लगाया –

1

इस दृष्टिकोण के लिए कई तरीके, की जटिलता के आधार रहे हैं क्या आप स्टोर करने की कोशिश कर रहे हैं।

पहले, स्लॉट का उपयोग करके। यदि एक, नीला, चिकन और वर्गीकृत श्रेणियों में हैं, तो आप उन्हें स्लॉट में स्टोर कर सकते हैं और उन्हें JSON तरीके से एक्सेस कर सकते हैं, अपने जावास्क्रिप्ट कोड में एक चर में मूल्य और स्टोर प्राप्त कर सकते हैं। उदाहरण (sudo):

var something1 = event.request.intent.slots.assetName.value; 
var something2 = event.request.intent.slots.assetName.value; 
buildSpeechletResponse(`my ${something1} likes ${something2} and blah blah blah`) 

दूसरा, विशेषताओं का उपयोग कुछ स्टोर और क्रम पर देर से इसका इस्तेमाल करने, एलेक्सा इस के बाद कौशल को समाप्त याद नहीं रखेंगे। उदाहरण:

'BreakfastIntent': function() { 
    var restaurant = randomArrayElement(getRestaurantsByMeal('breakfast')); 
    this.attributes['restaurant'] = restaurant.name; 

    var say = 'For breakfast, try this, ' + restaurant.name + '. Would you like to hear more?'; 
    this.response.speak(say).listen(say); 
    this.emit(':responseReady'); 
}, 

अंतिम, उन्हें एक डेटाबेस में संग्रहीत करने, अत्यधिक की सिफारिश की एक DynamoDB है और एलेक्सा कौशल किट से भंडारण और उपयोग डायनमो के लिए ट्यूटोरियल के बहुत सारे हैं। चेकआउट: https://github.com/alexa/alexa-cookbook/tree/master/aws/Amazon-DynamoDB/read

मुझे उम्मीद है कि इससे मदद मिलती है।

संबंधित मुद्दे