【问题标题】:Alexa Skill Development using flask-ask and ngrok使用 flask-ask 和 ngrok 开发 Alexa 技能
【发布时间】:2018-08-28 17:26:23
【问题描述】:

我正在尝试使用 python 中的 flask-ask 和 ngrok 开始为 alexa 开发一项技能。以下是我的代码:

from flask import Flask
from flask_ask import Ask, statement, question, session
import json
import requests
import time
import unidecode

app = Flask(__name__)
ask = Ask(app, "/reddit_reader")

def get_headlines():

    titles = 'is this working'
    return titles  

@app.route('/')
def homepage():
    return "hi there, how ya doin?"

@ask.launch
def start_skill():
    welcome_message = 'Hello there, would you like the news?'
    return question(welcome_message)

@ask.intent("YesIntent")
def share_headlines():
    headlines = get_headlines()
    headline_msg = 'The current world news headlines are 
{}'.format(headlines)
    return statement(headline_msg)

@ask.intent("NoIntent")
def no_intent():
    bye_text = 'I am not sure why you asked me to run then, but okay... bye'
    return statement(bye_text)

if __name__ == '__main__':
    app.run(debug=True)

代码在我的机器上运行良好,如果我打印出来,它会返回正确的输出。但是,当我使用 ngrok 在亚马逊上部署该技能时,会出现 HTTP 500 内部错误。我在文本和开发控制台中的 json 模拟器中都收到相同的 500 内部错误。

这是我的意图架构:

{
  "intents": [
    {
      "intent": "YesIntent"
    },
    {
      "intent": "NoIntent"
    }
  ]
}

我在 python 提示符中收到以下错误: AttributeError: module 'lib' has no attribute 'X509V3_EXT_get

stacktrace如下:

Traceback (most recent call last):
  File "C:\Python36\lib\site-packages\flask\app.py", line 1997, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Python36\lib\site-packages\flask\app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Python36\lib\site-packages\flask\app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Python36\lib\site-packages\flask\_compat.py", line 33, in reraise
    raise value
  File "C:\Python36\lib\site-packages\flask\app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Python36\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Python36\lib\site-packages\flask\app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Python36\lib\site-packages\flask\_compat.py", line 33, in reraise
    raise value
  File "C:\Python36\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Python36\lib\site-packages\flask\app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Python36\lib\site-packages\flask_ask\core.py", line 728, in _flask_view_func
    ask_payload = self._alexa_request(verify=self.ask_verify_requests)
  File "C:\Python36\lib\site-packages\flask_ask\core.py", line 662, in _alexa_request
    cert = verifier.load_certificate(cert_url)
  File "C:\Python36\lib\site-packages\flask_ask\verifier.py", line 21, in load_certificate
    if not _valid_certificate(cert):
  File "C:\Python36\lib\site-packages\flask_ask\verifier.py", line 63, in _valid_certificate
    value = str(extension)
  File "C:\Python36\lib\site-packages\OpenSSL\crypto.py", line 779, in __str__
    return self._subjectAltNameString()
  File "C:\Python36\lib\site-packages\OpenSSL\crypto.py", line 740, in _subjectAltNameString
    method = _lib.X509V3_EXT_get(self._extension)
AttributeError: module 'lib' has no attribute 'X509V3_EXT_get'

点冻结输出:

aniso8601==1.2.0
asn1crypto==0.24.0
certifi==2018.1.18
cffi==1.11.5
chardet==3.0.4
click==6.7
cryptography==2.2
Flask==0.12.1
Flask-Ask==0.9.8
idna==2.6
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
pycparser==2.18
pyOpenSSL==17.0.0
python-dateutil==2.7.0
PyYAML==3.12
requests==2.18.4
six==1.11.0
Unidecode==1.0.22
urllib3==1.22
Werkzeug==0.14.1

我已经尝试在 python 2.7 和 python 3.6 上运行它。任何帮助表示赞赏

【问题讨论】:

  • 堆栈跟踪是什么?
  • 将其添加到问题中
  • 你能做一个pip freeze 并粘贴那个输出吗?
  • 也添加了 pip freeze 输出
  • 尝试卸载并降级 cryptography 到 1.7 版本,看看是否能解决这个问题,pyOpenSSL 至少需要 1.7,旧的 v17.0.0 pyOpenSSL 依赖的新加密模块中可能已删除某些内容开。

标签: python alexa alexa-skill ngrok


【解决方案1】:

遇到了同样的问题,你可以通过将密码学降级到低于 2.2 的任何东西来解决它。

pip install 'cryptography<2.2'

rpg711 获得了所有功劳(参见 cmets 原帖)

【讨论】:

  • voglster 是正确的,这也为我修复了它。仅供参考,当前可用的最新版本是 2.1.4
  • 这仅适用于 Python 2 吗?我安装了密码学 2.1.4、1.7,但仍然出现此错误。
  • 使用 3.6 为我工作(使用密码学 2.1.4)
【解决方案2】:

我可以确认这适用于密码学 2.1.4,而不适用于 Python 3.7 和 Mac OS High Sierra 上的 2.5 或 2.6。但是在 Mac OS 上,还有其他问题需要先解决。

我发现安装 crypotgraphy 2.1.4 以错误结束(如下所示)。我在我的烧瓶问项目一开始就遇到了这个错误,并且在我开始编码之前必须手动安装需求。当我终于开始尝试 alexa 时,我得到了与密码学 2.5 或 2.6 相同的 500 错误(如上)。所以读到它必须是 2.1.4 我在尝试安装该特定版本时总是遇到这个错误:

    #include <openssl/opensslv.h>
             ^~~~~~~~~~~~~~~~~~~~
    1 error generated.
    error: command 'clang' failed with exit status 1

尝试了很多东西后,我尝试了这篇文章 (https://github.com/pyca/cryptography/issues/3489) 中的具体建议。尝试导出 CPPFLAGS 和 LDFLAGS 似乎没有用,但是以下操作可以

pip3 install cryptography==2.1.4 --global-option=build_ext --global-option="-L/usr/local/opt/openssl/lib" --global-option="-I/usr/local/opt/openssl/include"

恐怕我不能说我之前尝试过的东西,即 brew link openssl 和设置 CPPFLAGS 和 LDFLAGS 是否对最终结果有影响。但是,我没有像帖子中那样更新 openssl。我希望这会有所帮助,但我并不是从知识的角度进行操作,并且不确定我是否具备手动安装 opsenssl 的技能,如帖子中进一步指出的那样。

我希望这会有所帮助,因为我几乎放弃了。

顺便说一句:我发现使用 ngrok 的 Web 界面/检查器非常方便,即能够一次又一次地重播亚马逊请求对我来说非常非常方便,因为我在密码学问题之前犯了其他错误。

【讨论】:

    【解决方案3】:

    参考此链接帮助我解决了问题。 https://github.com/pyca/cryptography/issues/3489

    基本上,通过$ brew link openssl在mac中链接openssl并安装cryptography==2.1.4,问题就解决了。

    【讨论】:

      【解决方案4】:

      在 debian linux 上,尝试使用

      降级加密模块
      pip install 'cryptography<2.2'
      

      导致无法卸载旧模块的错误(我想我有版本 2.6.1)。我通过删除文件夹加密以及 /usr/lib/python3/dist-packages 中的 *-.egg 文件手动卸载了它。

      然后,当我尝试安装较旧的加密模块时,我又遇到了“无法构建轮子”错误,因为我缺少一些标头。根据cryptography module docs我跑了一次,

      sudo apt-get install build-essential libssl-dev libffi-dev python3-dev
      

      然后我终于能够安装加密模块 2.1.4 版,并且我的 alexa 技能正常工作。

      【讨论】:

        猜你喜欢
        • 2020-12-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-03
        • 1970-01-01
        • 2017-03-28
        • 1970-01-01
        • 1970-01-01
        • 2020-02-02
        相关资源
        最近更新 更多