Проблема с Null SpeechletResponse (Alexa)

Что-то не так с моим AMAZON.StopIntent. Независимо от того, что я туда вставил (я пробовал все из каждого учебника), всякий раз, когда он вызывается, я получаю «Произошла проблема с ответом запрошенного навыка», а приложение Alexa показывает ошибку как «speechletresponse не может быть нулевым». Мой проект в формате JSON, а не в формате Java.

Если кто-то может помочь, я был бы очень признателен!

Спасибо!

По запросу вот что отправляется в Lambda

{
  "session": {
    "sessionId": "SessionId.XXXXX",
    "application": {
      "applicationId": "amzn1.ask.skill.XXXXXXX"
    },
    "attributes": {},
    "user": {
      "userId": "amzn1.ask.account.XXXXXXX"
    },
    "new": true
  },
  "request": {
    "type": "IntentRequest",
    "requestId": "EdwRequestId.XXXXXX",
    "locale": "en-US",
    "timestamp": "2017-01-18T22:38:53Z",
    "intent": {
      "name": "AMAZON.StopIntent",
      "slots": {}
    }
  },
  "version": "1.0"
}

И вот соответствующий код:

var handlers = {
    'LaunchRequest': function () {
        this.emit('AMAZON.HelpIntent');
    },
    'GetNewDogThoughtIntent': function () {
        this.emit('GetDogThought');
    },
    'GetNewCatThoughtIntent': function () {
        this.emit('GetCatThought');
    },
    'GetDogThought': function () {
        var dogthoughtIndex = Math.floor(Math.random() * DOGTHOUGHTS.length);
        var randomDogThought = DOGTHOUGHTS[dogthoughtIndex];

        // Create speech output
        var speechOutput = "Your dog is thinking, " + randomDogThought;

        this.emit(':tellWithCard', speechOutput, "Your dog was thinking... ", randomDogThought);
    },
    'GetCatThought': function () {
        var catthoughtIndex = Math.floor(Math.random() * CATTHOUGHTS.length);
        var randomCatThought = CATTHOUGHTS[catthoughtIndex];

        // Create speech output
        var speechOutput = "Your cat is thinking, " + randomCatThought;

        this.emit(':tellWithCard', speechOutput, "Your cat was thinking... ", randomCatThought);
    },
    'AMAZON.HelpIntent': function () {
        var speechOutput = "You can ask me for what your cat or dog is thinking, or you can say exit... Right now I can only provide thoughts for one cat or dog at a time... What can I help you with?";
        var reprompt = "What can I help you with? Make sure to say if your pet is a cat or dog when you ask!";
        this.emit(':ask', speechOutput, reprompt);
    },
    'SessionEndedRequest': function (sessionEndedRequest, session) {
    },
    "AMAZON.StopIntent": function (shouldEndSession) {
    }

person Branch    schedule 30.12.2016    source источник


Ответы (3)


Я, наконец, получил это после того, как снова проконсультировался с учебником SpaceGeek и внес в него некоторые изменения. В общем, вот что получилось:

'AMAZON.StopIntent': function () { 
    this.emit(':tell', "Goodbye!");
}

Ключом был ':tell', которого у меня раньше не было. Спасибо всем, кто ответил и помог!

person Branch    schedule 28.01.2017

Можете ли вы опубликовать свой код для StopIntent? Вы должны вызывать в нем речевой ответ. Например:

'AMAZON.StopIntent': function (shouldEndSession, response) {
    var speechOutput = "Goodbye";
    response.tell(speechOutput); 
},

Правильно ли вы строите этот ответ и передаете ли его?

person AppleBaggins    schedule 18.01.2017
comment
Это дало много ошибок, когда я его вставил. Это связано с тем, что мой проект - JSON? Прямо сейчас у меня ничего нет в StopIntent, потому что все, что я помещаю, либо получает ошибку в Lambda, либо дает нулевой ответ. - person Branch; 19.01.2017
comment
Можешь выложить код своего навыка? Я не уверен, на каком языке вы работаете или как все устроено. Спасибо! :) - person AppleBaggins; 19.01.2017
comment
OP обновлен соответствующим кодом. на основе шаблона SpaceGeek. Обратите внимание, что SessionEndedRequest работает нормально, но не AMAZON.StopIntent. Я буквально все перепробовал там, так что в настоящее время у меня есть (shouldEndSession), но я пробовал и другие вещи в {} и в (). - person Branch; 19.01.2017
comment
Вы добавили AMAZON.StopIntent в свою схему намерений (в разделе «Модель взаимодействия», когда вы редактируете свой навык онлайн)? Я бы убедился, что AMAZON.StopIntent находится в вашей схеме, и просто для смеха я бы убедился, что вы используете одинарные кавычки вокруг AMAZON.StopIntent в своем коде, как вы сделали со всеми другими намерениями. - person AppleBaggins; 19.01.2017
comment
И (помогает, если я вернусь и перечитаю все детали) добавлю речевой вывод в StopIntent. 'AMAZON.StopIntent': function (shouldEndSession) { var speechOutput = "Goodbye." } - person AppleBaggins; 19.01.2017
comment
Я сделал именно этот код. и исправил котировки. Я даже добавил this.emit. ВСЕ ЕЩЕ нулевой ответ. Я просто не понимаю. это в схеме. я в растерянности. - person Branch; 20.01.2017
comment
Попробуйте создать его так: 'AMAZON.StopIntent': function (shouldEndSession, response) { var speechOutput = "Goodbye"; response.tell(speechOutput); }, - person AppleBaggins; 20.01.2017
comment
Это сделало это! Если бы вы могли обновить свой основной ответ с помощью этого кода, это было бы здорово. Спасибо ОГРОМНОЕ!! - person Branch; 20.01.2017
comment
Yikes-- Я говорил с в ближайшее время. Теперь я получаю сообщение об ошибке на сайте проверки навыков Alexa, в котором говорится, что удаленная конечная точка не может быть вызвана, и когда я на самом деле спрашиваю свое эхо, приложение говорит, что ответ навыка помечен как сбой. Так что это уже не ноль, что хорошо, но все равно не работает. - person Branch; 21.01.2017
comment
Я думаю, что если ваша функция Lambda выйдет из строя, вы всегда получите эту ошибку на тестовом сайте. Лучше всего просмотреть журналы Lambda (в CloudWatch) и посмотреть, что они сообщают вам, когда вы пытаетесь выполнить какое-либо действие. - person AppleBaggins; 21.01.2017
comment
Вот что я получаю: { "errorMessage": "Cannot read property 'tell' of undefined", "errorType": "TypeError", } - person Branch; 22.01.2017
comment
По сути, это означает, что response не определено, когда вы вызываете его с помощью StopIntent. Мой js слаб, но я уверен, что вам нужно прояснить это, чтобы избавиться от ошибки. - person AppleBaggins; 23.01.2017
comment
Это имеет смысл, но я также не знаю, как определить ответ. - person Branch; 23.01.2017
comment
Я думаю, что вам лучше всего открыть новый вопрос, опубликовать весь свой код (или ссылку на него), описать проблему, с которой вы столкнулись, и убедиться, что вы пометили вопрос с помощью node.js (или что-то подобное), так что вы можете привлечь людей, которые хорошо разбираются в этом языке. Извините, я не мог больше помочь! - person AppleBaggins; 26.01.2017
comment
Я добавил node.js в теги. Если я не получу другого ответа в ближайшее время, я задам новый вопрос. Спасибо. - person Branch; 27.01.2017

Я нашел эту ссылку на форуме разработчиков Alexa. Это может помочь в вашей проблеме..

https://forums.developer.amazon.com/questions/49211/system-error-speechletresponse-was-null.html

Я пишу этот код на php, если это поможет

$data       = file_get_contents("php://input");
$jsonData   = json_decode($data);
if($jsonData->request->type === "IntentRequest"){
     $IntentName    = $jsonData->request->intent->name;
     if($IntentName === "AMAZON.StopIntent"){
         $response = '{
            "version" : "1.0",
            "response" : {
               "outputSpeech": {
               "type": "PlainText",
               "text": ""
            },
            "shouldEndSession" : false
       }
   }';
   echo $response;
  }
}
person Rahul Gupta    schedule 17.01.2017
comment
Привет! Спасибо, но эти предложения по-прежнему не сработали — по-прежнему отображается неверный ответ. Все мои другие намерения работают нормально, это просто AMAZON.StopIntent. - person Branch; 17.01.2017
comment
Я думаю, вы должны ответить в ответ на запрос остановки намерения. Когда stopIntent запрашивает отправку пустого ответа или ответа с благодарностью. - person Rahul Gupta; 19.01.2017
comment
Я знаю, но я не могу найти код ответа, который действительно работает. - person Branch; 19.01.2017
comment
Я добавил код в свой ответ. Проверьте, работает ли он. - person Rahul Gupta; 20.01.2017
comment
Я использую .js/JSON, а не php, извините! - person Branch; 23.01.2017