如何调试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和外部服务。

通过这种设置,当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"]
}
}
},
服务选择

创建堆栈

选择模板

设置参数
接下来,我们要设置堆栈的名称。这个名称可以是任何容易理解的名称,但这次我选择了OAuthDebug作为名称。然后,让我们设置与外部服务进行协作所需的AccessTokenURL和AuthorizationURL。由于我们要使用亚马逊登录,所以我们按照默认的方式进行设置。
请查看以下链接以获取关于使用Amazon登录的详细文档:
https://developer.amazon.com/ja/docs/login-with-amazon/authorization-code-grant.html

设置堆栈选项和详细选项。
这里没有特别设定的项目,所以我们选择“下一步”。
创建堆栈

检查堆栈的构建状态。
我认为你可以看到事件日志的流动,以及环境正在被建立的情况。

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

Alexa应用程序的设置

我要实际发起通信试一试。
- スマホのアレクサアプリからデバックしたいスキルを選択しアカウントリンクをクリックします.

- これはおなじみのOauth2.0の認証画面ですね.

- 認証が成功すると次の画面が表示されます.

查看调试日志


- ログを確認するとaccess_tokenもここで確認できます.
認証失敗时的日志 shí de

我们可以确认发行代码顺利完成。
Successfully completed execution
然而,可以确认在获取访问令牌时发生了失败。
{
"error_description": "Client authentication failed",
"error": "invalid_client"
}

最后
本次我介绍了在Alexa应用程序中,当账户链接失败时的调试方法。
不仅限于Alexa,在类似的服务中也可以使用,所以请一定要试试看。
明天是@ikeponsu先生的”只使用Go语言的标准包进行图像处理(输入输出)”!敬请期待!