如何调试Alexa帐户连接方法

我的名字是自己紹介。

您好,我是ZOZO Technologies的内定者Sato。最近我一直在开发Alexa应用程序,玩得很开心!开发起来意外地很容易,所以我最近一直想开发一些能让生活更方便的技能。

※这篇文章是ZOZO Technologies#5的第四天。
昨天,@pakio发表了一篇文章,讲述了“如何使用watch属性检测v-for中的v-checkbox值”的内容。
此外,ZOZO Technologies每天更新五个圣诞节日历活动!

    • ZOZOテクノロジーズ#1

 

    • ZOZOテクノロジーズ#2

 

    • ZOZOテクノロジーズ#3

 

    ZOZOテクノロジーズ#4

要做的事情 zuò de shì

我认为在Alexa应用程序开发中,您可能希望使用OAuth2.0与外部服务(如Google、Facebook、Slack等)进行集成。在Alexa应用程序中,我们将与外部服务的集成称为“账户链接”,您只需填写所需的项目即可轻松进行设置。

但是,由于它容易设置,所以在协作失败或无法正常运行时,没有方法可以查找。

因此,本次我想通过参考2016年亚历克斯a博客推荐的下列文章,介绍一种基于2019年版本的调试方法的更新。

如何将Amazon API Gateway设置为代理以调试帐户连接。

使用API Gateway进行代理

在之前的博客中,我们通过使用AWS的API Gateway构建了一个HTTP代理,用于连接Alexa和外部服务。

API Gateway_Image19._CB520207811_.jpg

通过这种设置,当Alexa语音服务执行帐户链接时,所有产生的HTTP流量都可以记录在Cloudwatch中。

环境配置

前提

这次我们将利用Amazon作为外部服务来进行协作。
因此,需要有一个Amazon账户。

另外,为了在AWS上构建HTTP代理,还需要单独的AWS账户。
需要注意的是,必须拥有创建IAM权限。

使用亚马逊账号登录

让我们在Login with Amazon上创建OAuth2证书,以便将Amazon和Alexa连接起来。

制作完成

    • クライアントID

 

    クライアントシークレット

让我们记下这个。

您可以通过以下链接访问亚马逊登录服务:
https://developer.amazon.com/loginwithamazon/console/site/lwa/overview.html

这个制作方法可以参考以下的Alexa Developers JP频道的视频。而且,视频还介绍了账号链接的方法,非常赞的视频。

AWS云形成

AWS CloudFormation 是一种服务,用于以编程方式管理和部署 AWS 云资源。

使用AWS的CloudFormation来创建HTTP代理。
CloudFormation是AWS提供的一个服务,它可以帮助我们对AWS提供的资源进行建模和设置。
通过导入包含了API Gateway、Cloudwatch等资源配置的模板文件,我们可以轻松地构建环境。

下载和编辑模板

本次建议您提前下载使用原始网站提供的CloudFormation模板文件进行构建。

从以下网址获取文件:https://alexademo.ninja/httpproxy/cloudformation-us-east-1.json
关于如何将亚马逊API Gateway设置为代理以调试帐户链接的方法,可以从这里了解。

另外,这个博客是在2016年创建的,模板也一直保留原样至今。
这样做的话,在构建时会产生以下错误。

The runtime parameter of nodejs4.3 is no longer supported for creating or updating AWS Lambda functions. We recommend you use the new runtime (nodejs8.10, nodejs10.x) while creating or updating functions. (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException;)

错误是因为Lambda构建时所使用的nodejs版本不兼容,因此出现了错误提示。
根据日志显示,建议使用nodejs8.10或nodejs10.x版本,所以我们需要编辑以下文件以符合要求。

由于第65行的内容是”Runtime”: “nodejs4.3″,所以请将其更改为”Runtime”: “nodejs8.10″,然后保存。

    "HostnameLambda": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": "alexademo.ninja",
          "S3Key": "httpproxy/lambda/hostname_lambda_function.zip"
        },
        "Handler": "index.handler",
        "Runtime": "nodejs8.10",
        "Timeout": "30",
        "Role": {
          "Fn::GetAtt": ["LambdaExecutionRole", "Arn"]
        }
      }
    },

服务选择

Inked68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3133303637302f34626465393765372d643761322d363932372d623132612d3337626166386336643432342e706e67_LI.jpg

创建堆栈

Inkedtempsnip3_LI.jpg

选择模板

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3133303637302f63336230373933342d353438622d656639322d623338312d6539343234366139393930312e706e67.png

设置参数

接下来,我们要设置堆栈的名称。这个名称可以是任何容易理解的名称,但这次我选择了OAuthDebug作为名称。然后,让我们设置与外部服务进行协作所需的AccessTokenURL和AuthorizationURL。由于我们要使用亚马逊登录,所以我们按照默认的方式进行设置。

请查看以下链接以获取关于使用Amazon登录的详细文档:
https://developer.amazon.com/ja/docs/login-with-amazon/authorization-code-grant.html

tempsnip5.png

设置堆栈选项和详细选项。

这里没有特别设定的项目,所以我们选择“下一步”。

创建堆栈

tempsnip6.png

检查堆栈的构建状态。

我认为你可以看到事件日志的流动,以及环境正在被建立的情况。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3133303637302f34663435613636632d353237372d333030372d666538372d3531383833383938363431352e6a706567.jpg

链接复制

生成的ProxyAccessTokenURL和ProxyAuthenticationURL将成为代理入口的链接。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3133303637302f63333465333837392d366538392d323435372d363233632d6236316566323837386138652e706e67.png

Alexa应用程序的设置

hoge.png

我要实际发起通信试一试。

    スマホのアレクサアプリからデバックしたいスキルを選択しアカウントリンクをクリックします.
undefined
    これはおなじみのOauth2.0の認証画面ですね.
undefined
    認証が成功すると次の画面が表示されます.
undefined

查看调试日志

alexa2.PNG
alexa3.PNG
    ログを確認するとaccess_tokenもここで確認できます.

認証失敗时的日志 shí de

undefined

我们可以确认发行代码顺利完成。

Successfully completed execution

然而,可以确认在获取访问令牌时发生了失败。

{
    "error_description": "Client authentication failed",
    "error": "invalid_client"
}
alexa4.PNG

最后

本次我介绍了在Alexa应用程序中,当账户链接失败时的调试方法。

不仅限于Alexa,在类似的服务中也可以使用,所以请一定要试试看。

明天是@ikeponsu先生的”只使用Go语言的标准包进行图像处理(输入输出)”!敬请期待!

广告
将在 10 秒后关闭
bannerAds