首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python flask-ask中的Amazon Alexa主动事件请求

Python flask-ask中的Amazon Alexa主动事件请求
EN

Stack Overflow用户
提问于 2018-12-16 01:06:24
回答 4查看 1.1K关注 0票数 1

我正在尝试使用Python的requests模块向Proactive Events API发出请求。

但是,我总是收到作用域无效的响应。有人能帮上忙吗?我做错了什么?我的代码如下所示:

代码语言:javascript
复制
@ask.launch
def launch():
    content_type = "application/x-www-form-urlencoded;charset=utf-8"
    client_id = "amzn1.application-oa2-client.6a48XXXXXXX408"
    client_secret = "592XXXXxxxxxxx6"
    scope = "alexa::proactive_events"
    grant_type = "client_credentials"

    data = {"grant_type": grant_type, "client_id": client_id, "client_secret": client_secret, "scope": scope}
    r = requests.post("https://api.amazon.com/auth/O2/token", data=data, headers={"content-type": content_type})

    speech = render_template("welcome")
    reprompt = render_template("welcome_reprompt")
    return question(speech).reprompt(reprompt)

这就是我得到的回答:

代码语言:javascript
复制
{'error_description': 'The request has an invalid parameter : scope', 'error': 'invalid_scope'}
EN

回答 4

Stack Overflow用户

发布于 2019-01-28 22:39:12

因为你得到无效作用域的原因之一是你的技能清单中没有包含事件,所以我在这里包含一些步骤。我发现使用SMAPI来更新技能清单相当麻烦,所以我使用了ask cli。

  • 安装ask-cli:获取您的亚马逊帐户的授权码。在我的例子中,后端不是一个AWS lambda函数,而是一个外部web服务器,
  • 获取json格式的技能清单:将通知权限和事件元素ask api get-skill -s "amzn1.ask.skill.ZZZYYYZZ" --stage development > skill.json
  • Add到清单中:

{ "name": "alexa::devices:all:notifications:write" }

"events": { "publications": [ { "eventName": "AMAZON.AAABBBCC" } ], "endpoint": { "uri": "https://XXXYYYZZ:443/whatevercontext" } }

  • update清单:ask api update-skill -s "amzn1.ask.skill.ZZZYYYZZ" --stage development -f skill.json

代码语言:javascript
复制
- enable the notifications in the alexa app for your specific skill

现在,您应该能够获取令牌,下一步是将通知发送到设备

票数 3
EN

Stack Overflow用户

发布于 2018-12-17 17:35:48

您是否尝试过通过任何其他方法进行API调用?我刚刚用Postman试过了,它对我很管用。

我的Python有点生疏了,但这是Postman为Python自生成的代码。这可能会有帮助吗?

代码语言:javascript
复制
import http.client

conn = http.client.HTTPConnection("api,amazon,com")

payload = "grant_type=client_credentials&client_id=amzn1.application-oa2-client.whatever-value&client_secret=client-secret&scope=alexa%3A%3Aproactive_events&undefined="

headers = {
  'Content-Type': "application/x-www-form-urlencoded"
}

conn.request("POST", "auth,O2,token", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
票数 1
EN

Stack Overflow用户

发布于 2018-12-18 01:48:21

就像Karthik之前问的那样,你试过通过邮递员打电话吗?在你尝试编码之前,我首先建议你试着通过邮递员。

如果问题仍然存在,很可能是因为您没有在技能清单中包含主动事件所需的必要权限。要向技能清单添加必要的权限,您需要使用技能管理API & ASK Cli。按照文档的这一部分操作,并访问其中引用的链接,以正确地将所需权限添加到您的skill - https://developer.amazon.com/docs/smapi/proactive-events-api.html#onboard-smapi

一旦您成功添加了具有技能模式的事件和发布,您就应该能够成功地生成令牌了。如果您想让我更详细地说明具体步骤,请务必询问。干杯!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53795375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档