前言
在开发 Alexa 技能时,我们需要强制性地按照 Alexa 提供的技能模板(skill template)来编写,并且一旦上传到 AWS Lambda 后就不能轻易修改,这让新手开发者体验很不友好。另外,开发过程会经常用到复杂的语音命令,需要手动一步步执行测试,效率极低。为了解决这些问题,有开发者开发出了 alexa-conversation 这个 npm 包,能够在开发过程中更轻松地测试技能,并且支持自定义语音命令。本文将详细介绍如何使用 alexa-conversation。
安装
使用 npm 直接安装:
npm install alexa-conversation --save-dev
前置条件
使用 alexa-conversation 需要以下前置条件:
- 一个发布到 Alexa Skills Kit 的技能,并记录好技能的 Skill ID。
- 一个开发环境的 AWS Lambda 函数,并提前在 Alexa 开发者控制台中配置好相应的 ARN 信息。
使用
初始化
在使用 alexa-conversation 前,需要将其引入项目中:
const $alexa = require('alexa-conversation');
然后在测试用例中初始化一个 alexa 实例:
const user = $alexa.createUser({ accessToken: 'YOUR_TOKEN_HERE', refreshToken: 'YOUR_TOKEN_HERE', clientId: 'YOUR_CLIENT_ID_HERE', clientSecret: 'YOUR_CLIENT_SECRET_HERE', skillURL: 'YOUR_SKILL_LAMBDA_ARN_HERE', locale: 'en_US' });
其中各个参数的含义分别是:
accessToken
: Alexa 接口所需要的 token。refreshToken
: 同上。clientId
: 与 Skill 连接的 Client ID。clientSecret
: 与 Skill 连接的 Client Secret。skillURL
: Skill 的 AWS Lambda ARN。locale
: 语音命令的区域。
测试用例
在 alexa 实例初始化后,就可以开始编写测试用例了。
-- -------------------- ---- ------- ------------ -------------------- -- -- - -- -------- ------------ -- -- - ------ ---- --------------- --------- ------------ --- -------- ----------- ------------ --- --- -------- ------ --------------- -- - -- ------------ ------------------------------------------------ ----- --- ---- --- --------- --- --- -- --------- ------------ -- -- - ------ ---- --------------- --------- ---------- - ------- ----------- ---------- --- ------ ------- ------ --------------- -- - -- ------------ ------------------------------------------------ -------- --- ------ -------- --- --- ---
其中 startSession
用于初始化 session,launch
用于启动 Skill。say
表示用户输入的语音命令,通过 reprompt
和 end
表示 Alexa 对用户输入的语音命令的回应。最后可以通过 then
获取 Skill 返回的数据等。
动态设置参数
有时候我们需要动态设置一些参数,比如语音输出是根据搜索结果实时生成的,这时候可以在 say
中传入函数进行动态设置:
-- -------------------- ---- ------- -------------- -- -- - ------ ---- --------------- --------- ------- -- - -- --------------- ------ ------- --- ------------------ -- ----------- ---------- --- --- --------- ------ --------------- -- - -- ------------------ ------------------------------------------------------------------- --- ---
模拟用户的回复
除了上面说到的常规测试用例外,有时我们需要模拟用户的一些回复,比如询问是否搜索当前电影的续集:
-- -------------------- ---- ------- --------------- -- -- - ------ ---- --------------- --------- ------------ --- - ------- ----------- ------------ --- --- -------- ------ --------------- -- - -- ------ ------ ---- -------- --- ---- -- ------ --- --- --------- ------- -- --------------- -- - -- ------------ ---------------------------------------------------------- --- ---------- --- ---
测试错误处理
在真实的应用场景中,不同用户的输入和场景都会有很大的差异,因此必须考虑一些错误处理机制。下面是一个处理无法查询结果的测试示例:
-- -------------------- ---- ------- ------------ -- -- - ------ ---- --------------- --------- ------------ --- - ------- ----------- ------- ------ ---- --- -------- ------ --------------- -- - -- ------------ ---------------------------------------------------------- ---- ---------- --- ---
总结
通过以上介绍,我们可以看到 alexa-conversation 能够非常方便地模拟语音命令进行测试,并支持动态设置参数、模拟用户回复、测试错误处理等。有了它,开发者可以更快更好地编写出高品质的 Alexa 技能,不仅提升了开发效率,也增加了开发体验和用户体验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600567cf81e8991b448e408d