Amazon alexa skill开发中遇到的坑

3 篇文章 0 订阅
2 篇文章 0 订阅

 

博主也是一个刚接触amazon alexa skill开发的小白,从零开始。下面我说下我在开发我的alexash时所遇到的坑。

 

1、创建AWS lambda函数时没有 alexa skill kit这个触发器

           通常我们创建lambda函数服务都需要添加对应触发器。如图:

           

         

            可是我开始弄这个是是没有alexa skill kit 相关的触发器的。

           原因就是你必须把你的aws 地址改成 美国东部(弗吉尼亚北部)、美国西部(俄勒冈)、亚太区域(东京)、欧洲(爱尔兰) 不然会出现Dseigner里面找不到alexa skill kit的情况。推荐用第一个美国东部(弗吉尼亚北部)

                    

 

2、创建的skill怎样持续对话

            第一次唤醒技能后,能与你持续对话,直到你说出stop等退出之类的话语。

            这个问题真的困扰了我很久,我也在是经过1、2天的时间后才弄出来的,期间加上大佬的提醒,才弄清楚是怎么回事。alexa他默认的设置就是当他回复用户完后,自动会关闭对话,想要在次对话必须重新唤醒。  这里面就是一个关键的返回值的问题:ShouldEndsession的返回值,它的返回值默认是turn,也就是为什么对话一次后就会结束的原因,你需要把他设置成false。

         我们看一下默认的ShouldEndsession返回值样式类型

         唤醒时返回值

         

        用户对话时返回值

         

          由此可见,我们创建的技能的返回值没有发现ShouldEndSession,我们就需要自己去设置。     

 

如果你是自定义aws lambda编写的skill服务,你需要在你的返回值里面设置ShouldEndSession的值为false

           

          如果你是使用蓝图或者无服务储存库创建的函数,你只需要加上一个.withShouldEndSession(false)或者你在node_modules-->lib-->response-->ResponseFactory.js里面的ResponseFactory函数里面的return的speak的return this前面加上下面一段代码

 if (!isVideoAppLaunchDirectivePresent()) {
                    response.shouldEndSession = false;
                }

 

或者在你的服务代码时加上.withShouldEndSession(false)  如下

         

 

3、skill对话框模型

          对话框模型这个里是一个困扰了我很久的难题,主要是要实现uers与alexa在一个Intent里面的多轮对话。(我本人的理解)

我们开始创建的自定义skill是这样的:

          

          我在开始弄对话框模型时  创建的skill都是这样的。   而我们创建包含对话框模型的skill必须有下面这些东西:

dialog是对话框模型最重要的东西

 

你要创建对话框模型 必须开启你的槽填充

也就是  slot folling这个东西。其他的按照要求填写就行,当然你skill创建对话框模型,你对应的lambda也应该要创建对应的服务(参考的github上的代码)

对话框模型的skill的每一个Intent都写了两个函数来服务他。这里最重要的就是判断 request.dialogState的状态,也就是我上面框出来的内容。

也可以参考alexa官方文档(我给几个当时我看的,不完全是,你可以在里面找到你要的):https://developer.amazon.com/docs/custom-skills/define-the-dialog-to-collect-and-confirm-required-information.html

https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#confirmslot

https://developer.amazon.com/docs/custom-skills/define-the-dialog-to-collect-and-confirm-required-information.html

https://developer.amazon.com/docs/custom-skills/include-a-card-in-your-skills-response.html

同时npm上的文档可能也对你有帮助:https://www.npmjs.com/package/alexa-sdk#dialog-interface

 

4、skill再提醒与skill出错结束对话

再提醒功能主要是用做用户唤醒技能后,在接下来5秒内用户未发出命令或者意图,Echo会再次提醒用户需要做什么吗。提醒内容由你自定义,用到的是一个amazon写好的方法:. reprompt()  括号里面定义Echo再次提醒用户的话。

技能出错结束对话使我们在前面就已经已经介绍过,使用:.withShouldEndSession()  方法,只是说对应括号里面的值改为ture 就行。 当然需要你定义什么时候是出错的情况,我这里做的是让服务端给我返回一个状态码,判断状态码,从而确定技能是否出错。

 

5、Echo未识别用户意图

我们构建好技能后,一定会测试技能的kekao可靠性。在测试过程中你一定会发现Echo未能识别你的意图的情况。默认的Echo会返回一个技能有问题之内的话。我们有两种可以处理未识别用户意图的方法,一种是获取到用户的话,上传到你的cloud处理,再返回给你,第二种就是使用amazon的默认意图: amazon.fallback。 你只需要在你的skill里面添加它就可以在lambda中使用。

在你启用这个内置意图后,在Echo未识别用户意图时,Echo返回你自定义的话。

6、发布技能

子我们配置完技能,在发布时,需要注意两个地方。第一:你必须添加你的隐私政策url,不然在后面步骤会出错。第二:如果你的技能需要授权token,授权网站你必须使用https协议,不然会出现以下错误。

 隐私政策网站你可以自己写一个静态的,可以参考:https://meater.com/privacy-policy/

 

授权token必须使用https协议 不然会报如上错误。     可以使用:https://myssl.com/ssl.html   查看网站协议。

 

创建skill  与aws 服务可以查看我另外两篇博客

lambda中创建你skill里Intent服务函数时千万看清楚,不然会出现一些莫名其妙的错误。

注:前面说的httos协议你可以选择腾讯云的或者阿里的   只需要购买一个域名就行,他有免费一年的SSL,还有你必须有自己的服务器。购买一个域名很便宜 也就40来块

 

 

alexa 项目告一段落了。接下来会搞国内的智能音响。天猫精灵和小爱同学,在开发过程中遇到的心得或者坑,我依旧会写在博客中。

不好意思啊   不能在继续开发智能音箱了,如果后续有机会,会继续更新博客。

 

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值