使用Alexa技能管理(SMAPI)与CLI

时间:2017-11-16 04:42:49

标签: alexa-skills-kit login-with-amazon

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

“如果您要构建自己的工具或服务以与API集成,则需要实现与Login with Amazon的OAuth 2.0集成,以请求用户授权并检索用于调用技能管理的访问令牌API。请参阅Developer Guide for Login With Amazon。API要求使用授权代码授予类型。“

要使用Dialogflow API,您只需提供代理商的开发人员访问令牌即可。要使用SMAPI,每个请求必须具有Authorization标头,其值应该是从使用Amazon登录时检索的访问标记。

我有一个基本问题,即应用LWA Dev Guide中的说明来获取此访问令牌。这一切都是为了告诉您如何在网站上使用LWA。我没有在网站上设置SMAPI电话。我只想拥有一个Lambda函数,该函数被触发以启动nodejs代码来更新技能。如何在该上下文中应用这些说明?根据上述内容,本指南第25页的授权代码授权部分适用。有没有办法获得我可以用来直接获取access_token的auth代码,vs通过redirect_uri?换句话说,我想知道你是否可以在网站之外使用LWA框架,因此也可以使用SMAPI。

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

3 个答案:

答案 0 :(得分:3)

客户必须使用Amazon.com登录信息对您的应用进行身份验证和授权,以代表他们使用API​​。该部分需要Web浏览器。

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

更新:考虑您的意见......

听起来你只是想为自己编写脚本而无需在其中编写身份验证工作流,而是使用从开发人员控制面板获得的一些访问代码。

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

npm install -g ask-cli
ask init

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

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

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

这有帮助吗?

答案 1 :(得分:1)

我也遇到了一个问题,那就是找到有关如何为SMAPI访问创建令牌而不需要实施LWA的正确文档。 我想创建Lambda函数来检索技能的意图历史。

intent history documentation仅提及需要LWA令牌,而不涉及如何创建令牌。

可以通过/home/<username>/results.csv 创建用于SMAPI访问的LWA令牌。

See here

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

  

util命令

     

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

     

子命令任务子命令生成LWA(使用Amazon登录)   access_token和refresh_token,可能需要与Alexa一起使用   开发人员工具generate-lwa-tokens generate-lwa-tokens

     

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

     

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

ask-cli
     

新的安全配置文件并按照说明进行操作。       点击修改,然后将以下网址粘贴到允许的返回网址: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]

我无法确定我的案例需要哪些可能的范围(请阅读一项技能的意图历史记录)。我以为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 应该是正确的范围。但事实并非如此。它与其他问询范围一起测试了令牌的创建,但是没有一个创建了一个令牌,让我称之为意图历史。 仅调用无范围的alexa::ask:skills:read会为我创建一个工作令牌。

答案 2 :(得分:1)

您可以使用Node.js SDK和可用的here文档从JavaScript(Lambda等)中进行SMAPI调用。

要通过SMAPI进行身份验证,您需要执行以下操作:

  1. 设置LWA安全配置文件。
  2. 使用ASK CLI通过ask util generate-lwa-tokens --client-id <Client ID> --client-confirmation <Client Secret>将LWA客户端ID和客户端密钥交换为LWA刷新令牌。
  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