Node.js 如何将watson Assistant v2与Aws Lambda中的亚马逊技能套件连接?

Node.js 如何将watson Assistant v2与Aws Lambda中的亚马逊技能套件连接?,node.js,promise,aws-lambda,alexa-skills-kit,watson-assistant,Node.js,Promise,Aws Lambda,Alexa Skills Kit,Watson Assistant,你好我想用alexa设备连接我的watson助手, 为此,我需要亚马逊开发技能工具包和AWS lambda。但我无法连接watson,因为我的承诺有问题,而且在amazon开发者控制台中看不到我的代码日志。我的助手负责nodeJs应用程序 以下是我的沃森的标题: const assistant = new AssistantV2({ version: '2019-02-28', iam_apikey: 'apiSecretKey', url: 'https://gateway-lon

你好我想用alexa设备连接我的watson助手, 为此,我需要亚马逊开发技能工具包和AWS lambda。但我无法连接watson,因为我的承诺有问题,而且在amazon开发者控制台中看不到我的代码日志。我的助手负责nodeJs应用程序

以下是我的沃森的标题:

const assistant = new AssistantV2({
  version: '2019-02-28',
  iam_apikey: 'apiSecretKey',
  url: 'https://gateway-lon.watsonplatform.net/assistant/api'
});

const assistant_id = "assistantIDSecret" ; 
我尝试了一些代码:

const MyNameIsIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest'
      && handlerInput.requestEnvelope.request.intent.name === 'SearchIntent';
  },
   async handle(handlerInput) {


      assistant.createSession({
        assistant_id: assistant_id
      })
          .then(res => {
              session_id = res.session_id;
          })
          .catch(err => {
              console.log(err);
          });
        assistant.message({
            assistant_id: assistant_id,
            session_id: session_id,
            input: {
                'message_type': 'text',
                'text': "hello"
            }
        })
            .then(res => {
                console.log(JSON.stringify(res, null, 2));
                 speechText = res.output.generic.response.text;
            })
            .catch(err => {
              speechText = err;
      });


    }, function(err){
      speechText = "Problem with Api call";
    });

    return handlerInput.responseBuilder
      .speak(speechText)
      .getResponse();
  },
};
我试着替换,然后等待:

 try{

      let res = await assistant.createSession({
        assistant_id: assistant_id
      });

      session_id = res.session_id;

      let message = await assistant.message({
        assistant_id: assistant_id,
        session_id: session_id,
        input: {
          'message_type': 'text',
          'text': "hello"
        }

      });
      speechText = message.output.generic.response.text;

    }catch(err){
      speechText = err;
    }
speechText的结果应该会给我“你好”,这是来自沃森的回应。但现在Alexa说“对不起,我听不懂命令。请再说一遍。”


你有其他的方法来尝试这个吗?谢谢你

听起来您已经设法呼叫了Watson Assistant,如果您的对话框节点中配置的响应是“祝您好运”——这是您收到的,那么该连接正在工作。但是,如果我没记错的话,Alexa期望的响应是JSON对象,而不是字符串。因此,您需要格式化响应以满足Alexa的需求

快速浏览此网站:
表示下面是一个很好的示例,用于显示所需的响应json数据包

{
  "version": "string",
  "sessionAttributes": {
      "key": "value"
  },
  "response": {
      "outputSpeech": {
      "type": "PlainText",
      "text": "Plain text string to speak",
      "playBehavior": "REPLACE_ENQUEUED"      
  },
  "reprompt": {
      "outputSpeech": {
         "type": "PlainText",
         "text": "Plain text string to speak",
         "playBehavior": "REPLACE_ENQUEUED"             
      }
  },
  "shouldEndSession": true
 }
}

注意。我无法确认,因为我从未将Alexa技能用于生产(仅在开发环境下作为演示构建,并与少数人共享)。但我已经被告知,亚马逊不高兴他们的技能将工作转给沃森。真可惜

听起来您已经设法呼叫了Watson Assistant,如果您的对话框节点中配置的响应是“祝您好运”——这是您收到的,那么该连接正在工作。但是,如果我没记错的话,Alexa期望的响应是JSON对象,而不是字符串。因此,您需要格式化响应以满足Alexa的需求

快速浏览此网站:
表示下面是一个很好的示例,用于显示所需的响应json数据包

{
  "version": "string",
  "sessionAttributes": {
      "key": "value"
  },
  "response": {
      "outputSpeech": {
      "type": "PlainText",
      "text": "Plain text string to speak",
      "playBehavior": "REPLACE_ENQUEUED"      
  },
  "reprompt": {
      "outputSpeech": {
         "type": "PlainText",
         "text": "Plain text string to speak",
         "playBehavior": "REPLACE_ENQUEUED"             
      }
  },
  "shouldEndSession": true
 }
}
注意。我无法确认,因为我从未将Alexa技能用于生产(仅在开发环境下作为演示构建,并与少数人共享)。但我已经被告知,亚马逊不高兴他们的技能将工作转给沃森。真可惜