3

现在它可用了,我想使用 Alexa SMAPI 来管理技能模型,就像我可以通过Dialogflow API在 Google 上使用 Actions 一样。在SMAPI docs中,它说:

“如果您正在构建自己的工具或服务以与 API 集成,您将需要实现 OAuth 2.0 与 Login with Amazon 的集成,以请求您的用户授权并检索用于调用技能管理 API 的访问令牌。请参阅开发人员指南用于 Login With Amazon。API 需要使用授权码授权类型。

要使用 Dialogflow API,您只需提供来自代理的开发人员访问令牌。要使用 SMAPI,每个请求都必须有一个 Authorization 标头,其值应该是从 Login with Amazon 检索到的访问令牌。

我有一个关于应用 <a href="https://images-na.ssl-images-amazon.com/images/G/01/lwa/dev/docs/website-developer-guide 中的说明的基本问题._TTH_.pdf" rel="nofollow noreferrer">LWA 开发指南​以获取此访问令牌。这一切都是为了告诉您如何在网站上使用 LWA。我没有从网站设置 SMAPI 调用。我只想拥有一个 Lambda 函数,该函数被触发以启动 nodejs 代码以更新技能。我如何在这种情况下应用这些说明?如上所述,本指南第 25 页的授权代码授予部分适用。有没有办法只获取我可以用来直接获取 access_token 的身份验证代码,而不是通过 redirect_uri?换句话说,我想知道您是否可以在网站之外使用 LWA 框架和 SMAPI。

或者 SMAPI 真的只设置为与网站一起使用,而我们只是应该将 CLI 用于我所描述的用例?

4

3 回答 3

3

客户必须使用 Amazon.com 登录来验证和授权您的应用程序代表他们使用 API。该部分需要网络浏览器。

一旦完成并且您拥有访问令牌和刷新令牌,您将永远不需要再次使用网络......除非客户通过您提供的机制注销您的服务或通过亚马逊登录取消对您的服务的授权亚马逊帐户控制面板中的应用程序控件。然后他们需要通过 Login with Amazon 重新登录或通过 Login with Amazon 重新授权您的应用程序。

更新:考虑到您的评论...

听起来您只是想为自己编写脚本并且能够这样做而无需将身份验证工作流程写入其中,而是使用您从开发人员控制面板获得的一些访问代码。

所以这是一个可能的解决方案:在您控制的机器上进行 Alexa Skills Kit 命令行界面 (ASK CLI) 设置。

npm install -g ask-cli
ask init

它将为您打开一个浏览器并为您运行身份验证。然后它将您的访问和刷新令牌写入本地计算机上的配置文件。如果您在 Linux 或 Mac 终端上,您可能需要“sudo”安装。

init 命令的文档告诉您在哪里可以找到您的配置文件。将您的令牌从它复制到您的脚本,您应该能够在与该开发人员帐户关联的技能上运行 SMAPI 命令(我自己没有尝试过,但看起来您在设置 Login with Amazon 时请求相同的范围SMAPI 或在 ASK CLI init 中使用它,因此这些令牌应该可以工作)。

您仍然需要定期刷新访问令牌,但您不必建立任何网站架构。

这有帮助吗?

于 2017-11-20T16:57:39.320 回答
2

我在查找有关如何为 SMAPI 访问创建令牌而无需实施 LWA 的正确文档时也遇到了问题。我想创建 Lambda 函数来检索技能的意图历史记录。

意图历史文档只提到需要 LWA 令牌,但没有提到如何创建一个。

可以通过创建用于 SMAPI 访问的 LWA 令牌ask-cli

看这里

由于链接可以更改,因此我粘贴了文档中的摘录:

实用命令

util 命令提供实用工具来管理 Alexa 技能开发。

子命令 Task 子命令 Generate LWA (Login With Amazon) access_token 和 refresh_token,可能需要与 Alexa 开发人员工具 generate-lwa-tokens generate-lwa-tokens 一起使用

生成访问 Alexa 开发工具的技能可能需要的 LWA 访问令牌和刷新令牌。

要使用此功能,您必须按照以下步骤将 URL 列入白名单:

Browse to https://developer.amazon.com/home.html.
Select Apps & Services on the top menu bar.
Select Security Profile in the submenu bar.
Pick the profile you want to use and select the Web settings tab. If you do not have a profile, you can create one by clicking Create a

新的安全配置文件并按照说明进行操作。单击编辑并将这些 URL 粘贴到允许的返回 URL:http: //127.0.0.1 :9090/cb (如果使用默认选项打开浏览器)或https://s3.amazonaws.com/ask-cli/response_parser。 html(如果使用 --no-browser 选项)保存更改。

generate-lwa-tokens 命令格式

$ ask util generate-lwa-tokens [--scope ] [--no-browser]

我找不到我的案例需要哪些可能的范围(阅读技能的意图历史记录)。我假设这alexa::ask:skills:read应该是正确的范围。但事实并非如此。它使用其他询问范围测试了令牌创建,但没有一个创建了一个让我调用意图历史记录的令牌。只有在没有范围的情况下调用才ask util generate-lwa-tokens 为我创建了一个工作令牌。

于 2018-07-12T10:25:31.193 回答
1

您可以使用 Node.js 开发工具包从 JavaScript(Lambda 等)进行 SMAPI 调用,此处提供文档。

为了使用 SMAPI 进行身份验证,您需要执行以下操作:

  1. 设置 LWA 安全配置文件。
  2. 使用 ASK CLI 将您的 LWA 客户端 ID 和客户端密码交换为使用ask util generate-lwa-tokens --client-id <Client ID> --client-confirmation <Client Secret>.
  3. 初始化 SMAPI 节点 SDK 时使用此刷新令牌:
const Alexa = require('ask-smapi-sdk');

// specify the refreshTokenConfig with clientId, clientSecret and refreshToken generated in the previous step
const refreshTokenConfig = {
    clientId,
    clientSecret, 
    refreshToken
}
const smapiClient = new Alexa.StandardSmapiClientBuilder()
    .withRefreshTokenConfig(refreshTokenConfig)
    .client();

然后,您将能够通过 SDK 上的函数调用来访问 SMAPI!

有用的资源: https ://levelup.gitconnected.com/email-yourself-daily-alexa-skill-metrics-updates-using-lambda-smapi-and-ses-9c16ac97c1f8

于 2020-11-16T14:00:13.373 回答