Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 在SDK v2上使用Alexa和Lambda的HTTP请求,如何使其工作?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在玩亚马逊提供的ASK SDK v2,以便为Alexa制作技能,但我遇到了一个架构问题:

首先,@R_618_10107@请求就像魅力一样,但是当我和我的@R_618_10107@请求完成时我想返回语音响应但是我甚至不知道是否可能因为“句柄”功能应该返回某些内容(看评论):

const MyIntentHandler = {

  canHandle(handlerInput) {
    const request = handlerInput.requestEnvelope.request;
    return request.type === 'Launchrequest' || (request.type === 'Intentrequest' && request.intent.name === 'MyIntent');
  },handle(handlerInput) {

    var options = {
      host: '@R_618_10107@://foo.com',port: 80,path: '/mypath',method: 'GET'
    };

    var req = @R_618_10107@.request(options,function(result){
      result.on("end",function(){
        //I would like to return speak here like that :
        //return handlerInput.responseBuilder.speak("It works").withSimpleCard("myTestApp","It works").getResponse()
      })
    });
    req.end();
    //And I would like to remove this line to manage response in result.on("end",function(){}) above
    return handlerInput.responseBuilder.speak("It works").withSimpleCard("myTestApp","It works").getResponse();
  },};

有什么想法来处理这个?

解决方法

我找到了正式的方法

1)创建一个管理@R_618_10107@请求并返回承诺的新功能

function @R_618_10107@Get(options) {
  return new Promise(((resolve,reject) => {

    const request = @R_618_10107@.request(options,(responsE) => {
      response.setEncoding('utf8');
      let returnData = '';

      if (response.statusCode < 200 || response.statusCode >= 300) {
        return reject(new Error(`${response.statusCodE}: ${response.req.getHeader('host')} ${response.req.path}`));
      }

      response.on('data',(chunk) => {
        returnData += chunk;
      });

      response.on('end',() => {
        resolve(JSON.parse(returnData));
      });

      response.on('error',(error) => {
        reject(error);
      });
    });
    
    request.on('error',function (error) {
      reject(error);
    });
    
    request.end();
  }));
}

2)在Intent中,返回一个调用@R_618_10107@Get函数的promise:

const MyIntentHandler = {

  canHandle(handlerInput) {
    const request = handlerInput.requestEnvelope.request;
    return request.type === 'Launchrequest' || (request.type === 'Intentrequest' && request.intent.name === 'MyIntent');
  },method: 'GET'
    };

    return new Promise((resolve,reject) => {
     @R_618_10107@Get(options).then((responsE) => {
       resolve(handlerInput.responseBuilder.speak("it is done.").getResponse());
     }).catch((error) => {
        resolve(handlerInput.responseBuilder.speak('Thor is not available at the moment. Please try again later or contact your administrator.')
        .getResponse());
      });
    });
  },};

这是正确完成它的方法.我的例子是基于alexa petmatch sample.

大佬总结

以上是大佬教程为你收集整理的node.js – 在SDK v2上使用Alexa和Lambda的HTTP请求,如何使其工作?全部内容,希望文章能够帮你解决node.js – 在SDK v2上使用Alexa和Lambda的HTTP请求,如何使其工作?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。