我正在尝试调试使用flask-ask框架构建的小型Alexa技能。我的问题是我在一个简单的LaunchRequest上遇到400错误。相关的意图功能是:
@ASK.launch
def launch():
"""Welcome & ask for users intent."""
APP.logger.debug('LAUNCHING SESSION')
return question(render_template('welcome'))
当我在调试模式下本地运行服务器(通过ngrok隧道传输)并发出一个简单的启动请求(“start my_skills_name”)时,会记录两个请求:
$ python main.py app --run
INFO:werkzeug: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
INFO:werkzeug:127.0.0.1 - - [18/Feb/2018 12:47:43] "POST / HTTP/1.1" 400 -
INFO:werkzeug:127.0.0.1 - - [18/Feb/2018 12:47:44] "POST / HTTP/1.1" 200 -
从不显示来自intent函数的日志消息。
当我使用zappa部署技能并执行zappa tail
时,我会看到第二个请求(SessionEndedRequest)。这将返回200状态代码,但似乎确实产生了一些异常:
"request":{
"type":"SessionEndedRequest",
"requestId":"<1234>",
"timestamp":"2018-02-18T11:54:46Z",
"locale":"de-DE",
"reason":"ERROR",
"error":{
"type":"INVALID_RESPONSE",
"message":"An exception occurred while dispatching the request to the skill."
}
}
此请求的功能再次非常简单:
@ASK.session_ended
def session_ended():
APP.logger.debug('ENDING SESSION')
return statement('bye')
日志消息未显示,即使我删除了该函数并且根本不处理SessionEndedRequests,错误也保持不变。
我有点想法可能会发生什么。请求到达我的服务器,表明技能本身已正确配置。它看起来好像不会被路由到正确的意图函数,但是因为我完全依赖于ask.intent
装饰器,所以我不知道如何解决这个问题。有人能给我一个暗示吗?
答案 0 :(得分:0)
回答自己,因为我已经弄清楚了:
我从包__init__.py
文件运行APP,同时将intent函数保存在同一个包中的单独intents.py
中。为此,必须将intent模块导入init文件,但只能在创建APP对象之后。这意味着mypackage/__init__.py
必须如下所示:
from flask import Flask
from flask_ask import Ask
APP = Flask(__name__)
ASK = Ask(APP, '/')
from my_package import intents # importing my_package/intents.py
更详细的解释可以在larger applications的烧瓶文档中找到。