0

const HelloWorldIntentHandler = {
  canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'CanFulfillIntentRequest'

  },
  handle(handlerInput) {
    if(handlerInput.requestEnvelope.request.intent.name === 'Myname'){
    return MynameHandler.handle(handlerInput);
      
  }

const MynameHandler = {
  
    handle(handlerInput) {
    
    const speechText = 'ALex';
    const repromtText = 'Please respond';
 return handlerInput.responseBuilder 
 .speak(speechText)
.withCanFulfillIntent( 
    {
        "canFulfill":"YES",
 
    })
.getResponse();

}

};

{
  "session":{
    "new": true,
    "sessionId":"SessionId.<My Session id>",
    "application":{
      "applicationId":"amzn1.ask.skill.<Application id>"
    },
    "attributes":{
      "key": "string value"
    },
    "user":{
      "userId":"amzn1.ask.account.<user id>
    }
  },
  "request":{
    "type":"CanFulfillIntentRequest",
    "requestId":"EdwRequestId.<request id>",
    "intent":{
      "name":"Myname"
    },
    "locale":"en-US",
    "timestamp":"2018-10-12T09:36:31Z"
  },
  "context":{
    "AudioPlayer":{
      "playerActivity":"IDLE"
    },
    "System":{
      "application":{
        "applicationId":"amzn1.ask.skill.<application id>"
      },
      "user":{
        "userId":"amzn1.ask.account.<user id>"
      },
      "device":{
        "supportedInterfaces":{

        }
      }
    }
  },
  "version":"1.0"
}

我已经实施CanfulFillIntentRequest了很多天,但到目前为止没有运气。我正在使用alexa-sdk-nodejsv2。我无法为CanfulFillIntent. 我尝试以这些文档中所述的确切方式实施它。 https://developer.amazon.com/docs/custom-skills/understand-name-free-interaction-for-custom-skills.html
https://developer.amazon.com/docs/custom-skills/implement-canfulfillintentrequest -for-name-free-interaction.html

这是我的响应处理程序。

return handlerInput.responseBuilder
      .withCanFulfillIntent(
        {
          'canFulfill': 'MAYBE',
          'slots':{

              }
        })
        .getResponse();
    }

const HelloWorldIntentHandler = {
  canHandle(handlerInput) {
    //return handlerInput.requestEnvelope.request.type === 'IntentRequest' || 'CanFulfillIntentRequest'
return handlerInput.requestEnvelope.request.type === 'CanFulfillIntentRequest'
     // && handlerInput.requestEnvelope.request.intent.name === 'Myname' || 'HotelIntent';
  },
  handle(handlerInput) {
    if(handlerInput.requestEnvelope.request.intent.name === 'Myname'){
    return MynameHandler.handle(handlerInput);
      
  }
  };

当我在手动 JSON 中运行 JSON 代码时,它不响应CanfulFillIntent请求并且被重定向到错误处理程序代码。

4

1 回答 1

0

响应构建器withCanFulfillIntent()辅助方法仅在ASK SDK for Node.js(公共测试版)中可用

通过以下方式安装公共测试版

npm install --save ask-sdk-model@beta
npm install --save ask-sdk-core@beta

或在 package.json 中使用它

"dependencies": {
    "ask-sdk-core": "^2.1.0-beta.1",
    "ask-sdk-model": "^1.4.0-beta.1"
  }

我用 beta 测试了你的代码并得到了预期的结果:

{
  "version": "1.0",
  "response": {
    "outputSpeech": {
      "type": "SSML",
      "ssml": "<speak>ALex</speak>"
    },
    "reprompt": {
      "outputSpeech": {
        "type": "SSML",
        "ssml": "<speak>Please respond</speak>"
      }
    },
    "shouldEndSession": false,
    "canFulfillIntent": {
      "canFulfill": "YES"
    }
  },
  "userAgent": "ask-node/2.1.0-beta.4 Node/v8.10.0",
  "sessionAttributes": {
    "key": "string value"
  }
}
于 2018-10-15T12:56:15.903 回答