嗨,我正在尝试从Alexa接收使用请求在后端请求的响应。我在以下示例中使用Python:https://github.com/alexa/skill-sample-python-fact。但是我的后端是NodeJS。
在我的Lambda中:
URL = 'https://alexa-app-nikko.herokuapp.com/alexa'
def get_post_response():
r = requests.get(URL)
speech_output = str(r.text)
return response(speech_response(speech_output, True))
在我的后端,它被路由到/ alexa:
router.get('/', function(request, response) {
//console.log('Logged from Alexa.');
response.send('Hello World, Alexa!');
});
我在Lambda上对其进行了测试,并在以下结果上正常工作:
{
"version": "1.0",
"response": {
"outputSpeech": {
"type": "PlainText",
"text": "Hello World, Alexa!"
},
"shouldEndSession": true
}
}
但是我在技能输出或Alexa的回复中得到null
:
"There was a problem with the requested skill's response"
由于Lambda看起来不错,因此如何从开发者控制台进行调试。
答案 0 :(得分:0)
我不知道此问题与我的请求有什么关系。现在正在工作。
def on_intent(request, session):
""" called on receipt of an Intent """
intent_name = request['intent']['name']
#intent_slots = request['intent']['slots']
# process the intents
if intent_name == "DebugIntent":
return get_debug_response()
elif intent_name == "PostIntent":
return get_post_response()
elif intent_name == "PowerIntent":
return get_power_response(request)
#return get_power_response(intent_slots)
# ----------- Amazon Built-in Intents -----------------
elif intent_name == "AMAZON.HelpIntent":
return get_help_response()
elif intent_name == "AMAZON.StopIntent":
return get_stop_response()
elif intent_name == "AMAZON.CancelIntent":
return get_stop_response()
elif intent_name == "AMAZON.FallbackIntent":
return get_fallback_response()
else:
print("invalid Intent reply with help")
return get_help_response()
我调试了它,但发现关键字'slots'出了问题,因此我在代码中删除了intent_slots = request['intent']['slots']
,我也曾用它来将其传递给另一个函数return get_power_response(intent_slots)
。我将其注释掉,然后替换或仅放置了request
中的原始def on_intent(request, session):
。
答案 1 :(得分:0)
根据您自己的答案:
问题是,当您调用LaunchIntent
或其他类似AMAZON.StopIntent
的意图时,它们中没有键"slots"
。并且您尝试访问slots
的值,该值应该引发 KeyError 。
您可以做的是,当您确定调用了使用某些插槽的任何特定意图时,便尝试访问它们。
这就是我要做的:
def getSlotValue(intent, slot):
if 'slots' in intent:
if slot in intent['slots']:
if 'value' in intent['slots'][slot] and len(intent['slots'][slot]['value']) > 0:
return intent['slots'][slot]['value']
return -1
并尝试访问意图函数中的广告位值(在get_post_response
或get_power_response
中)。