【问题标题】:Using Alexa Skill Management (SMAPI) vs CLI使用 Alexa 技能管理 (SMAPI) 与 CLI
【发布时间】:2020-11-16 22:00:13
【问题描述】:

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

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

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

我有一个关于应用LWA Dev Guide​ 中的说明来获取此访问令牌的基本问题。这一切都是为了告诉您如何在网站上使用 LWA。我没有从网站设置 SMAPI 调用。我只想拥有一个 Lambda 函数,该函数被触发以启动 nodejs 代码以更新技能。我如何在这种情况下应用这些说明?如上所述,本指南第 25 页的授权代码授予部分适用。有没有办法只获取我可以用来直接获取 access_token 的身份验证代码,而不是通过 redirect_uri?换句话说,我想知道您是否可以在网站之外使用 LWA 框架和 SMAPI。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    更新:考虑您的 cmets...

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

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

    npm install -g ask-cli
    ask init
    

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

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

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

    这有帮助吗?

    【讨论】:

    • 感谢您的意见,不胜感激。这里的问题是 SMAPI 不是面向客户的功能(定义为 Alexa Skill 的客户)。它是开发人员的工具。因此,只有开发人员(或开发团队)需要通过身份验证流程,其中不应该包括开发人员必须建立网站才能进行身份验证。
    • 我只是简单地解释了使用 Login with Amazon 出售令牌的工作原理。我不是来评判或辩护的;只是为了通知
    • 谢谢,我已经将亚马逊和谷歌登录到网站并处理了身份验证令牌刷新。我希望获得指导(即使是未来),以便能够在网站界面的上下文之外使用 API。
    【解决方案2】:

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

    intent history documentation 仅提及需要 LWA 令牌,但未提及如何创建。

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

    See here

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

    实用命令

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

    Subcommands Task Subcommand Generate LWA (Login With Amazon) access_token 和 refresh_token,可能需要与 Alexa 一起使用 开发者工具 generate-lwa-tokens generate-lwa-tokens

    生成 LWA 访问令牌和刷新令牌,这可能是必需的 通过访问 Alexa 开发工具的技能。

    要使用此功能,您必须按照以下步骤将 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 为我创建了一个工作令牌。

    【讨论】:

    • Markus,我偶然发现了这个问题并看到了你的答案。感谢您发布它。在 'ask util generate-lwa-tokens' 可用之前,这是一个很大的空白,很高兴亚马逊填补了它。我仍然希望有一种方法可以在不需要人工输入的登录屏幕的情况下完成。我想知道为什么提供客户端 ID 和密码是不够的。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      • 2021-02-27
      • 2017-04-21
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多