Python 使用flask ask和ngrok进行Alexa技能开发

Python 使用flask ask和ngrok进行Alexa技能开发,python,alexa,alexa-skill,ngrok,Python,Alexa,Alexa Skill,Ngrok,我正在尝试在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

我正在尝试在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在amazon上部署HTTP 500时,该技巧会产生一个内部错误。我在文本和开发控制台的json模拟器中都得到了相同的500个内部错误

这是我的意图模式:

{
  "intents": [
    {
      "intent": "YesIntent"
    },
    {
      "intent": "NoIntent"
    }
  ]
}
在python提示符中出现以下错误:
AttributeError:模块'lib'没有属性'X509V3\u EXT\u 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'
Pip冻结输出:

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

我尝试在Python2.7和Python3.6上运行它。非常感谢您的帮助

遇到同样的问题,您可以通过将加密级别降低到低于2.2的任何级别来修复它

pip install 'cryptography<2.2'

pip-install'cryptography我可以确认,这适用于cryptography 2.1.4,而不是Python3.7和Mac OS High Sierra上的2.5或2.6。然而,在Mac OS上,还有其他问题需要首先解决

我发现安装Crypotraphy 2.1.4会以一个错误结束(如下所示)。我在flask ask项目的一开始就遇到了这个错误,在开始编码之前,我必须手动安装需求。当我最终开始尝试alexa时,我得到了与加密2.5或2.6相同的500错误(如上所述)。因此,读到它必须是2.1.4,我在尝试安装该特定版本时总是出现以下错误:

    #include <openssl/opensslv.h>
             ^~~~~~~~~~~~~~~~~~~~
    1 error generated.
    error: command 'clang' failed with exit status 1
#包括
^~~~~~~~~~~~~~~~~~~~
生成1个错误。
错误:命令“clang”失败,退出状态为1
在尝试了很多东西之后,我尝试了这篇文章中的具体建议()。尝试导出CPPFLAGS和LDFLAGS似乎不起作用,但以下操作确实起作用

pip3安装加密==2.1.4--global option=build_ext--global option=“-L/usr/local/opt/openssl/lib”--global option=“-I/usr/local/opt/openssl/include”

恐怕我不能说我之前尝试过的东西,即brew链接openssl和设置CPPFLAGS和LDFLAGS,是否对最终结果产生了影响。然而,我没有像在文章中那样更新openssl。我希望这会有所帮助,但我并不是从一个有知识的岗位上进行操作的,也不确定我是否有能力像文章中进一步指出的那样手动安装opsenssl

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


顺便说一句:使用ngrok的web界面/inspector我觉得非常方便,即能够一次又一次地重播amazon请求对我来说非常非常方便,因为我在密码问题之前犯了其他错误。

参考此链接帮助我解决了问题


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

在debian linux上,尝试使用

pip install 'cryptography<2.2'

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

stacktrace是什么?将其添加到问题中可以执行
pip冻结
并粘贴该输出。添加pip冻结输出以尝试卸载
cryptography
并将其降级到1.7版,看看是否可以解决此问题,pyOpenSSL至少需要1.7,旧版本v17.0.0 pyOpenSSL所依赖的新加密模块中可能删除了一些内容。voglster是正确的,这也为我修复了它。仅供参考,当前最新版本是2.1.4,这是否仅适用于Python2?我安装了加密技术2.1.4和1.7,但仍然会出现此错误。为我使用了3.6(加密技术2.1.4)
sudo apt-get install build-essential libssl-dev libffi-dev python3-dev