如何正确使用 Alexa Skill 中的异步函数?

2024-03-03

我对异步编程非常陌生,所以请原谅我缺乏理解,但我目前正在构建一个调用私人停车 API 的 Alexa 技能。您可以调用该API,它会为您提供最近的停车位。

    const getParkingSpots_Handler =  {
        canHandle(handlerInput) {
            const request = handlerInput.requestEnvelope.request;
            return request.type === 'IntentRequest' && request.intent.name === 'getParkingSpots' ;
        },
        handle(handlerInput) {
            const request = handlerInput.requestEnvelope.request;
            const responseBuilder = handlerInput.responseBuilder;
            let sessionAttributes = handlerInput.attributesManager.getSessionAttributes();

            let requestData = {
                // I can't show this sorry
                }

            let options = {
               // I can't show this sorry
            };

            // Call to the API
            const postAxios = async () => {
                try {
                    const response = await axios.post(API_URL, requestData, options);
                    return response.data.result;
                } catch(error) {
                    console.log(error);
                }
            };

            // Another function. This is where I use the data from the API response. I intent to add some code here that only picks out a number of results, sorts it by price etc. etc.
            const useTheResult = async () => {
                const result  = await postAxios();
                console.log('Response from the API:', result);
            };

            // We defined the functions above, now we need to execute them
            useTheResult();

            // This is what we will refer to the 'problem code'.
            let say = `Hello from confidientialCompany! You can park...`;
                return responseBuilder
                    .speak(say)
                    .reprompt('try again, ' + say)
                    .getResponse();
        },
    };

理想情况下,一旦我添加代码来修改其中的响应useTheResult,我希望问题代码在里面useTheResult还有……为什么?因为一旦我选出了我想要的数据并对其进行了修改,我就会尝试将 say 变成“Alexa 可读”的句子,例如:

    let say = `Hello from confidentialCompany! You can park on ${roadName1}, ${roadName2} and ${roadName3}. Prices start from ${startingPrice} pounds.`

如果我现在就这样做,那么在 Alexa 控制台中进行测试时就会出现错误。我不知道该怎么办了,我觉得我会陷入异步函数的无限循环中。


Add async关键字到handle方法名称及用途await inside:

const getParkingSpots_Handler =  {
        canHandle(handlerInput) {
            const request = handlerInput.requestEnvelope.request;
            return request.type === 'IntentRequest' && request.intent.name === 'getParkingSpots' ;
        },
        async handle(handlerInput) {
            const request = handlerInput.requestEnvelope.request;
            const responseBuilder = handlerInput.responseBuilder;
            let sessionAttributes = handlerInput.attributesManager.getSessionAttributes();

            let requestData = {
                // I can't show this sorry
                }

            let options = {
               // I can't show this sorry
            };

            // Call to the API
             let result = null;
             try {
                 const response = await axios.post(API_URL, requestData, options);
                 result = response.data.result;
             } catch(error) {
                 // handle this case and return some message to User
                 console.log(error);
             }
            
            // assume your data structure to be like:
            /**
             result: {
               roadName1: "1st street",
               roadName2: "2nd street",
               roadName3: "3rd street", 
               startingPrice: "1.2"
             }
            */
            const {roadName1, roadName2, roadName3, startingPrice} = result;

            // This is what we will refer to the 'problem code'.
            let say = `Hello from confidentialCompany! You can park on ${roadName1}, ${roadName2} and ${roadName3}. Prices start from ${startingPrice} pounds.`;
                return responseBuilder
                    .speak(say)
                    .reprompt('try again, ' + say)
                    .getResponse();
        },
    };

如果你想在同一个函数中进行更多调用:

try {
   const [response1, response2] = await Promise.all([
      axios.post(API_URL1, requestData, options),
      axios.post(API_URL2, requestData, options)
   ]);
   // do things with your responses
   // ...
} catch(error) {
   // handle this case and return some message to User
   console.log(error);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确使用 Alexa Skill 中的异步函数? 的相关文章

  • 使用亚马逊登录显示用户尚未同意,但他们已经同意 - Alexa SMAPI

    我正在尝试使用技能管理 API SMAPI 检索我的 Alexa 开发者帐户上的技能列表 我有以下 HTML javascript a href href img border 0 alt Login with Amazon src htt
  • 如何向 Amazon Alexa Skills Kit (ASK) 混合字符串和数字输入?

    我正在尝试创建一个 Amazon Alexa 技能套件来进行某种自动化 这需要接受由字符串和数字组成的语音输入 a test12fish 当我在 Alexa Skills Kit 中使用自定义插槽时 它不允许我键入带有数字的字符串 当我尝试
  • Alexa 是否/可以替换其为链接用户生成的 UserId?

    我们有一个利用 Alexa 技能的应用程序 其中包含用户详细信息的帐户链接 根据 Alexa 的帐户关联 文档 我们的技能是为帐户链接设置的 帐户链接又引用第三方 或者可能是内部 身份管理系统 IMS 进行用户身份验证 我们的应用程序 以及
  • 如何通过点击而不是语音来触发 Alexa 意图?

    我正在开发一个链接到 Alexa 技能的 Flask 应用程序 我正在尝试构建一种功能 当用户单击某些内容 例如通知 时 Alexa 会询问用户是否希望继续 如果用户说 是 那么 Alexa 会将用户带到相关网页 我的问题是 是否可以通过点
  • Alexa Skills Set SDK - 增加技能超时

    我正在使用 Node js 上的 Alexa Skill Set SDK 构建 Alexa 教学练习技能 我将每个烹饪步骤保存到数据库中 因此如果技能超时 用户可以重新打开技能并从中断处继续 问题是 用户对必须不断重新打开技能感到恼火 人们
  • 将 Alexa 与 Twitter 关联的帐户 - Amazon Echo

    截至目前 我似乎无法将我的 Alexa 技能与 Twitter 关联起来 目前 我有一个在 EBS 上运行的节点 express 服务器 我正在使用它护照推特处理身份验证的 oauth 部分 现在我的流程是这样的 在 Alexa 应用程序中
  • 从意图中获取 Alexa Slot 值

    我正在努力构建 Alexa 技能 但在从意图对象中获取槽值时遇到了障碍 意图对象 JSON 如下所示 intent name string slots string name string value string 我的问题是识别插槽的第一
  • OpenSSL SSL_connect:SSL_ERROR_SYSCALL 连接到 api.amazonalexa.com:443

    我一直在尝试让技能管理 API 正常工作 今天早上我遇到了一个新的障碍 但没有进行任何更改 我收到一条 用户昨晚未同意此操作错误 并且今天早上没有更改任何内容 这是我收到的卷曲日志 尝试使用与昨 晚相同的代码访问 API 现在我得到 str
  • Alexa 自定义插槽类型:没有意图价值

    我已经将这个问题发布到亚马逊开发者论坛 但没有在那里收到答案 我想 Stackoverflow 从一开始就应该是首选 据我了解 如果我使用自定义槽类型 即使其可能值列表不包含口语单词 口语单词仍会传递给函数 文档说 自定义槽类型并不等同于枚
  • 如何使用有效的 AWS 配置文件配置 Alexa Ask-cli?

    在使用了developer amazon com和aws amazon com的漂亮浏览器GUI之后 事情变得越来越严重 现在我想使用ask cli来初始化Alexa技能及其lambda函数 当我想要的时候ask init 它告诉我 我应该
  • Amazon Alexa 意图动态变量

    我正在尝试构建一个 Alexa 技能套件 用户可以通过说类似的话来调用意图 GetFriendLocation where is Friend 为了让 Alexa 识别变量friend 我必须定义所有可能的值LIST OF Friends文
  • 如何让 Alexa 以秒为单位倒计时

    我希望能够在我的技能中实现 Alexa 有声 倒计时 15 秒 我知道我可以
  • 如何动态添加槽值到Alexa技能

    我是 Alexa 开发的新手 我已使用 AWS lambda 函数和 Node js 代码成功创建了 Alexa 技能 这是我的意图模式 intents slots name locationName type LOCATION LIST
  • Alexa 智能家居功能相互压倒

    我有一个用于智能家居窗帘的 Alexa 项目 其中包括两个范围控制器 一个亮度控制器和每个端点上的切换控制器 两个范围控制器 切换控制器和亮度控制器都有不同的实例和友好名称 当向 Alexa 发出命令时 任何包含百分比的内容都默认为亮度控制
  • 如何在 Alexa Skill 中使用 Java 获取亚马逊用户电子邮件

    我是 Alexa 技能开发的新手 我正在尝试开发一项 Alexa 通过我的电子邮件回复的技能 我正在开发 Java 技能 并且我刚刚能够通过以下方式获取用户会话 ID getSession getUser getUserId Getting
  • 使用 Alexa 技能进行 Node JS 回调

    我有一个包含请求调用的模块 但它似乎没有被执行 var request require request var Alexa require alexa sdk var APP ID
  • 账户与azure AD关联后如何从Alexa获取accesstoken

    我尝试将 Alexa AWS Lambda 函数 node js 6 10 与 Azure Active Directory 连接到我的 Azure Cloud API 读完后文档 https developer amazon com do
  • 如何存储我正在开发的 Alexa 技能的数据?

    我目前正在开发一项基于医疗保健的 Alexa 技能 所以我需要存储有关疾病 诊断和症状的信息 我已经掌握了一项基本技能 包括在一个文件中包含有关一种疾病的信息 制作了一个 zip 文件 将其上传到 AWS Lambda 并获得了 Amazo
  • 通过实施 Web 服务向 Alexa 托管自定义技能

    我正在开发一个网络服务 用于处理 Alexa 发送的请求并在 net 框架中以特定响应进行响应 Alexa 以 JSON 格式发送到您的服务的请求正文 如下所示 version string session new true session
  • Alexa 找不到我的技能

    我根据 Alexa Skills Kit 中提供的示例之一将 Alexa Skill 创建为 AWS Lambda Node js 应用程序 我遵循了所有说明 我的 Echo 注册的账户与我在 AWS 上的开发者账户相同 我在亚马逊开发者控

随机推荐

  • 在 Docker 中运行 Blazor

    我使用 Visual Studio 2019 预览版 创建了第一个 Blazor 测试 回购协议是here https github com mitkins holly test 当我在 VS 中点击 IISExpress 按钮时 一切都按
  • Amazon Linux 2 OpenVPN 客户端包不可用?

    当我尝试跑步时sudo yum install openvpn在我刚刚创建的 Amazon Linux 2 实例上 我收到消息 No package openvpn available 我需要添加包存储库吗 我在任何地方都没有发现需要这样做
  • 如何在flutter中过滤列表?

    我正在尝试向我的过滤器添加过滤器list 这就是我所做的 productTemp sort a b gt b productPrice compareTo a productPrice productTemp productTemp whe
  • 如何修复运行 redis:alpine Docker 镜像时出现的警告

    如果我运行Redis 高山 https hub docker com redis 使用命令的 Docker 镜像 docker run redis alpine 我看到几个警告 1 C 08 May 08 29 32 308 Warning
  • 修改android项目名称

    我有没有可能改变name of my project正如它出现在Package Explorer 我正在使用 Eclipse IDE 我尝试编辑string xml in res value文件夹 但这不会在资源管理器视图中更改它 右键单击
  • vue:未捕获类型错误:无法读取未定义的属性...

    我在用着 电子邮件受保护 cdn cgi l email protection和vue 官方 webpack 模板 https github com vuejs templates webpack构建一个应用程序 本地开发时经常看到这样的警
  • 在 Django 应用程序中实现 Facebook 登录的简单且最新的方法

    这个问题在stackoverflow中很常见 并且有很多不同的问题和答案 但我找不到我需要的 首先 我想准确定义我需要的内容 允许用户使用其 Facebook 凭据登录我的应用程序的选项 该应用程序将保存匹配的经典 Django 用户 我只
  • 通过删除旧行自动强制执行最大数据库表大小

    我有一个 Oracle 表 其中包含应用程序的事件日志消息 我们不希望该表增长失控并占用太多空间 因此我们希望将其可以包含的行数设置为某个大数字 例如一百万 所以我们想告诉Oracle 当表变得太大时 它应该删除最旧的行 为新行腾出空间 有
  • 读取文件中的值,循环直到 value = $foo?

    我正在编写一个用于 grep 的 shell 脚本 foo然后计算出现的次数 然后运行命令 每次运行该命令时 该文件中都会减少一个 foo 实例 不确定如何连续读取该文件并减少我设置的变量中的值 count grep o foo some
  • 是否有在线模拟屏幕阅读器工具来测试自定义网页? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们关心我们网站的可访问性 并想看看普通屏幕阅读器如何感知和解码它 不 至少没有任何好处 也不代表屏幕阅
  • Google 地图可以设置为缓慢持续平移吗?就像一场全球革命?

    正如标题所说 我正在寻找解决方案 但没有找到任何可以引导我找到正确文档或文章的内容 如果您有任何想法或可以向我指出一个可以使用的可能解决方案 我将不胜感激 Thanks 你可以自己这样做 Use setInterval https deve
  • OpenGL 实现多通道

    我在移植一些已成功实现的代码时遇到问题着色玩具 https www shadertoy com view XdyfWK对于桌面 OpenGL 问题是我需要创建一个 FrameBufferObject FBO 以便我可以进行离屏计算 稍后将其
  • VB.NET ArrayList 到 List(Of T) 类型复制/转换

    我有一个返回旧式 ArrayList 的第 3 方方法 我想将其转换为类型化 ArrayList Of MyType Dim udc As ArrayList ThirdPartyClass GetValues Dim udcT AS Li
  • 如何获取特定日期的唯一客户和重复客户每天的客户数量?

    我试图从我的订单表中获取结果 以获取第一次订购和重复订单的客户数量列表 像下面这样的东西 Date 1st time time repeat order 2014 09 01 43 90 2014 09 02 3 45 2014 09 03
  • 由于 ISAPI 报告不健康状况,ASP Net Core 应用程序被回收

    我收到系统事件日志条目 An ISAPI reported an unhealthy condition to its worker process Therefore the worker process with process id
  • .NET 生产代码中的“Assert”语句

    离开是否明智Trace Assert and Debug Assert代码中的语句是否 稳定 并且已移至测试和生产环境中 如果是这样 这些断言语句有何帮助 让 Guard 类等检查异常情况并适当引发异常还不够吗 调试断言 http msdn
  • MYSQL:带有 if 语句的过程

    我正在尝试制定一个例程 首先检查用户密码 如果正确 它将从不同的表返回一些值或连续更改一些值 如果不进行在 PHP 中处理的两个查询 这是否可能 首先要求输入密码 检查密码是否正确 然后允许用户更改名称 下面是使用电子邮件和密码获取用户中的
  • SCRIPT5:由于 Wordpress 中的 jQuery.min CDN 文件,IE9 上的访问被拒绝

    我读过很多关于 SCRIPT5 IE9 中的访问被拒绝问题的其他文章 但据我所知 这篇文章有点不同 我不太确定为什么会发生这种情况 使用标准 2011 主题安装 Wordpress 3 4 1 时会出现这种情况 我使用以下函数将脚本排入队列
  • Bash 脚本中的反引号和 $() 有什么区别? [复制]

    这个问题在这里已经有答案了 我在 Bash 脚本中看到两种不同的形式 它们的作用似乎相同 some command and some command 两者有什么区别 什么时候应该使用它们 没有任何语义差异 反引号语法是较旧且功能较弱的版本
  • 如何正确使用 Alexa Skill 中的异步函数?

    我对异步编程非常陌生 所以请原谅我缺乏理解 但我目前正在构建一个调用私人停车 API 的 Alexa 技能 您可以调用该API 它会为您提供最近的停车位 const getParkingSpots Handler canHandle han