- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 python 开发一个 Web 服务,该服务将作为自定义 Alexa Skill 的后端逻辑运行。我正在使用 Flask、flask-ask(Alexa Skill Kit) 和 MySQL 扩展来开发此 Web 服务。
此 Alexa Skill 将允许用户预订 parking 位、检查 parking 场是否已满并查找 parking 位。
我还有一个本地数据库,其中存储了所有 parking 相关信息。
我遇到的问题是只能返回查询的第一个结果。
这是我的 intent 之一的代码:
'''This is a Web Service for the *** Parking skill'''
author__ = '*****'
import logging
from flaskext.mysql import MySQL
from flask import Flask, render_template
from flask_ask import Ask, statement, question
mysql = MySQL()
app = Flask(__name__)
app.config.from_object(__name__)
app.config['MYSQL_DATABASE_USER'] = '*****'
app.config['MYSQL_DATABASE_PASSWORD'] = '*****'
app.config['MYSQL_DATABASE_DB'] = '*****'
app.config['MYSQL_DATABASE_HOST'] = '*****'
mysql.init_app(app)
ask = Ask(app, "/")
logging.getLogger("flask_ask").setLevel(logging.DEBUG)
@ask.intent('AvailableParking')
def available(occupancy):
#converts the inputted occupancy variable into all caps, to match the DB schema
occupancy = occupancy.upper()
#creates cursor variable that connects to DB
cursor = mysql.connect().cursor()
#connects to db and executes SQL query that displays all garages where the OCCUPANCY field matches the users slot input (OPEN OR CLOSED)
cursor.execute("SELECT GARAGE_NAME FROM GARAGES WHERE OCCUPANCY = %s", (occupancy,))
#returns the first row of the query results
data = cursor.fetchone()
data = data[0]
return statement(data)
这按预期工作。即使总共有 3 个 parking 场,Alexa 在触发 intent 时也会说“Lot A”。
我想使用MySQL方法cursor.fetchall()代替cursor.fetchone,如下所示:
data = cursor.fetchall()
return statement(data)
但我收到错误:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/usr/local/lib/python2.7/dist-packages/flask_ask/core.py", line 767, in _flask_view_func
result = self._map_intent_to_view_func(self.request.intent)()
File "/home/ngrok/ngrok/FETCHALLRETURN", line 46, in available
return statement(data)
File "/usr/local/lib/python2.7/dist-packages/flask_ask/models.py", line 188, in __init__
super(statement, self).__init__(speech)
File "/usr/local/lib/python2.7/dist-packages/flask_ask/models.py", line 51, in __init__
'outputSpeech': _output_speech(speech)
File "/usr/local/lib/python2.7/dist-packages/flask_ask/models.py", line 402, in _output_speech
xmldoc = ElementTree.fromstring(speech)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1311, in XML
parser.feed(text)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1651, in feed
self._parser.Parse(data, 0)
TypeError: Parse() argument 1 must be string or read-only buffer, not tuple
{"context": {"System": {"apiAccessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJhdWQiOiJodHRwczovL2FwaS5hbWF6b25hbGV4YS5jb20iLCJpc3MiOiJBbGV4YVNraWxsS2l0Iiwic3ViIjoiYW16bjEuYXNrLnNraWxsLmY2NDViYTgxLTZmM2QtNDZlNi04MDM1LTI1MTBlYTg5ODNkYiIsImV4cCI6MTUzMTE1MzIxMiwiaWF0IjoxNTMxMTQ5NjEyLCJuYmYiOjE1MzExNDk2MTIsInByaXZhdGVDbGFpbXMiOnsiY29uc2VudFRva2VuIjpudWxsLCJkZXZpY2VJZCI6ImFtem4xLmFzay5kZXZpY2UuQUhFRzdPQ0RLN01TNkdFWkhYTUlTUlFXRkNNTktKVUxHTk1GTkdSVFlWSFk0WFZMSkVWUzRZTFFGSjVFSDVRR0YyREVYQTVVVjI0UzJHNFJNU0tYWFpHVjZFRDY0RktJWkpHVVQyWURVRlZZTzVLVUZLSENDUzVPWUdPTDI3NUU1QjRGRU1XTk5VRVAzUkxPSENFNzRUVTdLSDZBIiwidXNlcklkIjoiYW16bjEuYXNrLmFjY291bnQuQUg0T1FZSVBSQ1NRVEZaR1pIWkVRSFpCU1RISDI1VUE2MjYyNFY1WTdDWTdCSzZDWU9RWjdJN1BMV0s0Tzc0RFpVSzRBMkw0MlpQUjRQV1lFRlJIVzY2MlRPVlVEM1BCT1c0UkxRSjNFSFpVWllTTzM2VkM0NkMzRVdHT1ZPRFlVSVNWNzNPRVRHUkJEUkFTRjc0NEg3VFcyR0pYM01FN0kyWVNGQkFTNjNOUUFGNzNCVUJHUlRSSU5ZQ0tIM0dPWjZZVjNVS0tRM0xZMlFJIn19.WPKBopJc_WAxHJdHsYg6bgqYhEahsIzwCsBm3EUPWdKmqzSmjPTudJH-58a0VndsGc32CxARDhmShy1RxsSGUwacXr-Hb1sMlkHcrKV-I6dUFA9JXgGOHP92WyDBe4NcmZd2evEHGSAlWr7mW3cPpjUKax7INsSWqbziNGneP5DWV7T6FA6S3G-h5BBiX5rVx2SBcfYZ-1ixCom5GvQa8Xe77CGg2zwugd9oIvib6Q9JLfYQrmWcg9qBYfnKfaQsQNYg6I_OJ5fL5YcCmfq5FtfPpPL-k3UWvSiZwFqwch-AUNzu35csmLw9BF3JbVXPxPr-o70OlVWxmOeVEnYAzA", "apiEndpoint": "https://api.amazonalexa.com", "application": {"applicationId": "amzn1.ask.skill.f645ba81-6f3d-46e6-8035-2510ea8983db"}, "device": {"deviceId": "amzn1.ask.device.AHEG7OCDK7MS6GEZHXMISRQWFCMNKJULGNMFNGRTYVHY4XVLJEVS4YLQFJ5EH5QGF2DEXA5UV24S2G4RMSKXXZGV6ED64FKIZJGUT2YDUFVYO5KUFKHCCS5OYGOL275E5B4FEMWNNUEP3RLOHCE74TU7KH6A", "supportedInterfaces": {}}, "user": {"userId": "amzn1.ask.account.AH4OQYIPRCSQTFZGZHZEQHZBSTHH25UA62624V5Y7CY7BK6CYOQZ7I7PLWK4O74DZUK4A2L42ZPR4PWYEFRHW662TOVUD3PBOW4RLQJ3EHZUZYSO36VC46C3EWGOVODYUISV73OETGRBDRASF744H7TW2GJX3ME7I2YSFBAS63NQAF73BUBGRTRINYCKH3GOZ6YV3UKKQ3LY2QI"}}}, "request": {"error": {"message": "An exception occurred while dispatching the request to the skill.", "type": "INVALID_RESPONSE"}, "locale": "en-US", "reason": "ERROR", "requestId": "amzn1.echo-api.request.a7699e3a-71b3-4cf5-8d23-63e45c86a957", "timestamp": "2018-07-09T15:20:12Z", "type": "SessionEndedRequest"}, "session": {"application": {"applicationId": "amzn1.ask.skill.f645ba81-6f3d-46e6-8035-2510ea8983db"}, "new": false, "sessionId": "amzn1.echo-api.session.7c96f3f4-c78f-4c10-9535-9e1e9fe8a21e", "user": {"userId": "amzn1.ask.account.AH4OQYIPRCSQTFZGZHZEQHZBSTHH25UA62624V5Y7CY7BK6CYOQZ7I7PLWK4O74DZUK4A2L42ZPR4PWYEFRHW662TOVUD3PBOW4RLQJ3EHZUZYSO36VC46C3EWGOVODYUISV73OETGRBDRASF744H7TW2GJX3ME7I2YSFBAS63NQAF73BUBGRTRINYCKH3GOZ6YV3UKKQ3LY2QI"}}, "version": "1.0"}
{}
127.0.0.1 - - [09/Jul/2018 15:20:12] "POST / HTTP/1.1" 200 -
查询结果以元组形式返回,如果不进行一些格式化,显然无法直接返回到 Alexa。
有人知道如何将查询的所有结果返回给 Alexa 吗?
最佳答案
我正在编写一个应用程序,其扩展与您相同,除了 sqlalchemy 和使用 sqlite 之外。我的查询作为对象返回,所以我要么:
关于python - 将所有查询结果返回至 Alexa Skill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51252852/
如何打开一个大格式的文本文件 [[skill1, skill2, skill3, ...], [skill1, skill4, skill6, ...], ….] 在 Python 中。我尝试过使用
首先,如果我在 alexa 应用程序开发页面上使用模拟器,一切正常,尽管请求看起来有些不同。如果我对我的 Alexa 设备说“询问 appName {x} 和 {y}”,那么我的 Web 服务会被调用
Alexa 技能商店中的某些技能仅使用“Ok Alexa,告诉我一个笑话”或“Ok Alexa,你能复制我吗”之类的句子即可激活,而不使用“Ok Alexa,告诉 [skill]”等标准调用[某事]”
我想开发一个简单的 Alexa 技能,它应该只做一件事。 通过调用它: Alexa, play Radio Luxembourg 它应该播放 http://sc-rtllive.newmedia.lu
我可以将我的 Amazon Alexa Skill 与两个外部服务相关联吗? 我想从他们两个汇总数据,但我需要使用两个不同的访问 token 。 我可以通过使用 Alexa 帐户链接来获取它们吗? 最
我正在开发 Alexa 技能。我想授予我公司的其他人使用该技能的权限,以便对其进行测试。有没有办法做到这一点? 到目前为止,我发现了以下内容: https://developer.amazon.com
我正在使用 Node.js 上的 Alexa Skill Set SDK 构建 Alexa 教学练习技能。我将每个 cooking 步骤保存到数据库中,因此如果技能超时,用户可以重新打开技能并从中断处
我正在使用 Node.js 上的 Alexa Skill Set SDK 构建 Alexa 教学练习技能。我将每个 cooking 步骤保存到数据库中,因此如果技能超时,用户可以重新打开技能并从中断处
我正在阅读 Alexa Skills 的文档,似乎有一个后备意图 https://developer.amazon.com/docs/custom-skills/standard-built-in-i
我正在构建一个需要能够处理问题答案的 Alexa 应用程序。我有一个 SkipIntent具有跳过问题的示例话语的意图。 我想建一个 AnswerIntent可以接受任何答案并根据正确答案处理它们。我
当前行为: 我可以通过开发者控制台访问我的每项 Alexa Skills 的指标,例如“过去 7 天的唯一身份客户总数” 期望的行为: 通过 Amazon 的 ASK CLI 或 SMAPI 执行相同
在 php 中,我们通常使用 name="skills[]"从表单中获取数据作为数组,但如何在 angularjs 中执行此操作?PHP 示例: 我想在 AngularJS 中做同样的事情,但出现语
我想在我的话语中收到一美元。因此,例如,如果我问 Alexa: Send $100.51 to Kroger. (读作,一百美元五十一美分)我想收到值100.51在适当的插槽中。 我试过搜索,我像这样
我正在做其中一个教程(HelloWorld),以使Echo熟练掌握技巧,然后按照指示进行操作。当我使用Service Simulator测试该技能时,我输入了 Alexa, tell Greeter
使用此Amazon-provided library,我正在研究alexa技能,该技能可播放短mp3文件队列。触发音频的代码如下所示: this.response.audioPlayerPlay('R
例如,假设我想在ios应用程序中启动相机以拍照,是否可以利用ASK和iPhone麦克风来理解用户语音命令(“启动相机”)来启动相机并触发ios中的功能? 最佳答案 简短答案:不可以。 长答案:是的,但
我正在使用 python 开发一个 Web 服务,该服务将作为自定义 Alexa Skill 的后端逻辑运行。我正在使用 Flask、flask-ask(Alexa Skill Kit) 和 MySQ
早些时候我遇到了 Alexa 没有将状态更改回空白状态的问题,并且 found out that there is a bug in doing that .为了完全避免这个问题,我决定强制我的技能始
我想拥有一种自定义技能,但是它需要直接访问用户的声音(我们录制的音频的输出)。 Alexa可以/将中继流而不是发送请求调用(启动/意图/ session 结束)吗? 我了解自定义技能可以将mp3作为响
我创建了一个 Amazon Alexa 技能,它具有一个意图 (MyIntent) 和两个自定义槽类型(SlotA 和 SlotB)。意图架构如下所示: { "intents": [ {
我是一名优秀的程序员,十分优秀!