我在我的意圖模式中有3個插槽(account
,dollar_value
,,0 )用於Alexa技能,我想保存講話者在會話屬性中提供的任何插槽。在Python中爲Alexa技能添加會話屬性
我使用下面的方法來設置會話屬性:
def create_dollar_value_attribute(dollar_value):
return {"dollar_value": dollar_value}
def create_account_attribute(account):
return {"account": account}
def create_recipient_first_attribute(recipient_first):
return {"recipient_first": recipient_first}
但是,如你所猜測的,如果我想保存多個插槽數據sessionAttributes
,該sessionAttributes
被覆蓋作爲下面的情況:
session_attributes = {}
if session.get('attributes', {}) and "recipient_first" not in session.get('attributes', {}):
recipient_first = intent['slots']['recipient_first']['value']
session_attributes = create_recipient_first_attribute(recipient_first)
if session.get('attributes', {}) and "dollar_value" not in session.get('attributes', {}):
dollar_value = intent['slots']['dollar_value']['value']
session_attributes = create_dollar_value_attribute(dollar_value)
從我lambda函數的JSON響應對於其中兩個時隙(dollar_value
和recipient_first
)中提供的是如下語音輸入(我的猜測是,the create_dollar_value_attribute
方法在第二if語句覆蓋第一):
{
"version": "1.0",
"response": {
"outputSpeech": {
"type": "PlainText",
"text": "Some text output"
},
"card": {
"content": "SessionSpeechlet - Some text output",
"title": "SessionSpeechlet - Send Money",
"type": "Simple"
},
"reprompt": {
"outputSpeech": {
"type": "PlainText"
}
},
"shouldEndSession": false
},
"sessionAttributes": {
"dollar_value": "30"
}
}
爲sessionAttributes
正確的反應應該是:
"sessionAttributes": {
"dollar_value": "30",
"recipient_first": "Some Name"
},
如何創建對此有何反應?有沒有更好的方法在JSON響應中爲sessionAttributes
添加值?
我沒有在'事件屬性[「會議」]'但是我不知道如何實例化這個'事件[「會議」] [」屬性'] = {}'會解決它? alexa/lambda如何知道? 'onSessionStarted'函數做了什麼? – Jonathan