带有flask-ask的LaunchRequest上的400 Bad Request错误

时间:2018-02-18 12:34:30

标签: flask alexa-skills-kit alexa-skill flask-ask

我正在尝试调试使用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装饰器,所以我不知道如何解决这个问题。有人能给我一个暗示吗?

1 个答案:

答案 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的烧瓶文档中找到。