使用 Alexa 技能进行 Node JS 回调

2024-03-07

我有一个包含请求调用的模块,但它似乎没有被执行。

var request = require('request');
var Alexa = require('alexa-sdk');
var APP_ID = <my alexa app ID>;

var self = module.exports = {
   handler : function (event, context, callback) {
            var alexa = Alexa.handler(event, context);
            alexa.appId = APP_ID;
            alexa.registerHandlers(self);
            alexa.execute();
    },
    "TestIntent": function () {
        var speechOutput = "Recorded Test";
        request("http://www.google.com", 
            function(error, response,body)   
             { 
                 return console.log(body);
             }
        );
        this.emit(':tell', speechOutput);
    }
}

我从未在 Lambda 控制台或其他任何地方的 console.log 中看到 google body 出现。我尝试过其他调用(例如 API 发布到我的应用程序服务器 API),但也没有看到该调用出现在该服务器上。

似乎该进程在请求回调完成之前关闭。

在 Amazon Lambda“测试器”中,我得到了有效的响应。在 Alexa“测试器”中,我得到“记录测试”的响应。在 Echo 上(通过 Alexa),我从设备返回“记录的测试”响应。所以这个技能看起来效果很好。只是“请求”操作(在本例中,只是拉取 google.com)失败了。

Thanks!!

UPDATE:我至少能够完成通话,但可能不是最干净的方式。

var request = require('request');
var Alexa = require('alexa-sdk');
var APP_ID = <my alexa app ID>;

var self = module.exports = {
   handler : function (event, context, callback) {
            var alexa = Alexa.handler(event, context);
            alexa.appId = APP_ID;
            alexa.registerHandlers(self);
            alexa.execute();
    },
    "TestIntent": function () {
        var that = this; 
        var speechOutput = "Recorded Test";
        request("http://www.google.com", 
            function(error, response,body)   
             { 
                 console.log(body);
                 that.emit(':tell', speechOutput);
                 return;
             }
        );
    }
}

您的(原始)代码不起作用,因为您正在调用 this.emit(':tell', speechOutput);

就在之后 request("http://www.google.com",

The :tellfunction 将调用 lambda 回调并终止 lambda 函数的执行。

您自己找到了解决方案:等待request要执行的回调并发出:tell当时的事件。

请参阅 alexa-skills-kit-sdk-for-nodejs 代码:
https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/blob/master/lib/response.js#L6 https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/blob/master/lib/response.js#L6
and
https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/blob/master/lib/response.js#L101 https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/blob/master/lib/response.js#L101

您可以在以下位置了解有关 Lambda 编程模型的更多信息http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Alexa 技能进行 Node JS 回调 的相关文章

随机推荐

  • SSR 如何与 PWA 结合

    如何使用 PWA 渐进式 Web 应用程序 进行 SSR 服务器端渲染 据我了解 SSR SSR 运行时将加载页面并运行必要的脚本以将数据加载到页面上 然后返回渲染后的html 这对于不会运行 javascript 的网络爬虫和无脚本的浏览
  • 使用字符串访问属性

    给定一个与对象字段同名的字符串 如何获取对象字段的引用 例如 假设我向 GetFieldByStr 方法传入一个名为 field1 的字符串 并且该对象具有字段名称 field1 那么如何获取对 field1 对象的引用 我假设以某种方式使
  • 使用 Ratchet\Push.js 加载页面后执行自定义脚本

    所以在 GitHub 文档上棘轮2 0 2 https github com twbs ratchet我发现了以下说法 包含 JavaScript 的脚本标签将不会在以下页面上执行 加载了push js 如果您想将事件处理程序附加到 其他页
  • 负整数除法令人惊讶的结果

    在我的应用程序中 我遇到了以下情况并对结果感到惊讶 8 7 2 均为整数 这是什么意思 对于实际值 即8 0 7 0 结果大致为 1 143 使用整数除法的结果将向下舍入到更负的值 2 这也称为 楼层划分 这就是为什么你会得到一些令人困惑的
  • 如何获取字符串中单词的所有组合

    我想获得字符串中所有相邻单词的组合 例如 细绳get all combinations我想要得到 get all combinations all combinations get all all get combinations 我写下一
  • SQL 多个 where 子句

    我找不到像这样使用多个 where 子句是否有效 我使用 JPA MySQL 我需要多个 where 子句 其中一个在这里是 not 还是我遗漏了一些东西 select d from T DEBIT d where d status PEN
  • 更改 UIView 的边界并使 UICollisionBehavior 对其做出反应

    是否可以更改 UIView 的边界 使用 UIAttachmentBehaviors 附加到其他一些 UIView 并使 UICollisionBehavior 与 UIAttachmentBehavior 相结合对其做出响应 如此处的示例
  • 在 Go 中解组通用 json [重复]

    这个问题在这里已经有答案了 我是一名新的 Go 程序员 来自 Java 我想重现一种易于在 Java 中使用的通用方法 我想创建一些函数 允许我对 JSON 字符串执行 Unmarshal 以避免代码重复 这是我当前不起作用的代码 type
  • java.sql.SQLException:连接已关闭

    我们正在得到java sql SQLException 连接已关闭 执行事务时间歇性出现异常 我们使用的是 tomcat 7 X 下面是配置
  • .Net C# RESTSharp 10 分钟超时

    我已将浏览器控件嵌入到 Net 表单中 并将其编译为窗口的可执行文件 浏览器控件正在显示我们的 HTML5 图像查看器 该应用程序打开套接字 以便它可以侦听来自各个服务器的 推送 请求 这允许将图像推送到单个用户的桌面 当传入图像推送请求时
  • 熊猫:组内最大值和最小值之间的差异

    给定一个如下所示的数据框 GROUP VALUE 1 5 2 2 1 10 2 20 1 7 我想计算每组内最大值和最小值之间的差异 也就是说 结果应该是 GROUP DIFF 1 5 2 18 在 Pandas 中执行此操作的简单方法是什
  • git 有一个损坏的丢失对象,无法修复

    git commit error inflate data stream error incorrect data check error corrupt loose object 26f0654cde5d83f2ed8d971474d9d
  • 如何在 Racer / DerbyJS 上创建服务器端应用程序逻辑?

    我正在学习新的细节DerbyJS http derbyjs com堆栈 我找不到将应用程序逻辑放在服务器端的方法 声明的意图是所有代码都应该能够在服务器和客户端中运行 但是 我需要隐藏某些数据 并且仅在根据用户会话信息进行身份验证时才将其发
  • Neo4j Spatial over REST 通过 JAVA API 不起作用(对我来说)

    我正在 Neo4J 上开发 Grails 应用程序 我还想将其导出为 GIS 数据库 查看如何在 GeoServer uDig 中使用 neo4j 的示例 似乎空间集成仅通过嵌入式 neo4j 数据库进行 有谁知道是否可以进行设置 以便我的
  • Rails 中漂亮(过时)的 RESTful URL

    我希望我的网站具有如下所示的 URL example com 2010 02 my first post 我有我的Post模型与slug字段 我的第一篇文章 和published on字段 我们将从中扣除 url 中的年份和月份部分 我想要
  • 无法从 Fargate 容器内访问 S3 存储桶(错误请求且无法找到凭据)

    我创建了一个私有 s3 存储桶和一个 Fargate 集群 其中包含一个简单的任务 该任务尝试使用以下命令从该存储桶中读取数据 python 3 and boto3 我已经在 2 个不同的 docker 镜像上尝试过了 在一个镜像上我得到了
  • 通过键盘中断关闭所有线程

    我在这里尝试做的是使用键盘中断来退出程序中所有正在进行的线程 这是我的代码的精简版本 其中创建了线程 for i in taskDictionary try sleep 60 thread Thread target mainModule
  • 当使用 css3 比例缩放元素时,它会变得像素化,直到动画完成后。我正在为带有边框的元素设置动画

    http jsfiddle net nicktheandroid 5Ytnj http jsfiddle net nicktheandroid 5Ytnj 当我添加 webkit backface visibility hidden to
  • 将响应保存为文件

    我有返回的 WebAPI 方法HttpResponseMessage with csv文件内容 private static HttpResponseMessage FileAsAttachment string file var now
  • 使用 Alexa 技能进行 Node JS 回调

    我有一个包含请求调用的模块 但它似乎没有被执行 var request require request var Alexa require alexa sdk var APP ID