Alexa Intent отправляет два запроса и терпит неудачу

Что я пытаюсь сделать:

У меня очень простой навык Alexa Skill, который слушает командное слово:

{
    "intents": [{
       "intent": "AffiliateEmpire",
       "slots": [
       {
          "name": "affiliate_action",
          "type": "AFFILIATE_ACTIONS"
       },
       {
          "name": "date",
          "type": AMAZON.DATE
       }
   }]
}

Пользовательский тип слота:

AFFILIATE_ACTIONS   commissions | earnings | sales | summary

Мои образцы высказываний:

AffiliateEmpire for affiliate {affiliate_action}
AffiliateEmpire get {affiliate_action} for {date}

Это связывается с моим сервером PHP, на котором я прослушиваю тип запроса.

В чем проблема?

Когда я вызываю командное слово без какого-либо намерения, оно отправляет «LaunchRequest» моему серверу и правильно возвращает card и outputSpeech

Если я прошу о намерении, он отправляет IntentRequest моему серверу, но затем также отправляет SessionEndedRequest.

Я обрабатываю IntentRequest и отправляю ему ответ в кодировке json в следующих строках:

array(
   'version'           => '1.0',
   'response'          => array(
      'outputSpeech' => array(
      'type' => 'PlainText',
         'text' => 'Some simple response'
      )),
   'shouldEndSession'  => true,
   'sessionAttributes' => array()
));

Мое Amazon Echo никогда не говорит Some simple response, а вместо этого выдает There was a problem communicating with the requested skill

До этого у меня был очень похожий навык, но я не вижу, что делаю неправильно.

Что я пробовал.

Я использую php для записи файла журнала для каждого необработанного запроса, запроса json_decoded и ответа, который я отправил обратно в Amazon. Я также использую инструмент тестирования, но это дает мне The remote endpoint could not be called, or the response it returned was invalid.. Я знаю, что он может вызывать мою конечную точку, поскольку каждый раз я вижу записываемый файл журнала.

Почему он вызывает мое намерение, но затем вызывает ошибку, завершая сеанс?


person Alexander Holsgrove    schedule 12.02.2017    source источник


Ответы (2)


Попробуйте SSML для ответа на запрос alexa, например:

{
"version": "1.0",
"response": {
    "directives": [],
    "shouldEndSession": false,
    "outputSpeech": {
        "type": "SSML",
        "ssml": "<speak>I am going to book a cab for you @ your provided time.</speak>"
    }
  }
}
person Shivam Gupta    schedule 30.10.2017

Ошибка, которую вы получаете ... endpoint could not be called, or the response it returned was invalid предполагает, что json, который вы отправляете обратно в службу Alexa, отформатирован неправильно. Вы получаете запрос, и именно так он регистрируется. Теперь вам просто нужно устранить неполадки с ответом, который вы отправляете обратно. Скорее всего, это что-то незначительное. Вот документы для формата ответа json: https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html. Если вы можете поделиться выводом json из кода php, будет легче помочь в устранении неполадок.

Кроме того, я считаю, что вам нужно перейти на 'shouldEndSession' => false

array(
   'version'           => '1.0',
   'response'          => array(
      'outputSpeech' => array(
      'type' => 'PlainText',
         'text' => 'Some simple response'
      )),
   'shouldEndSession'  => false,
   'sessionAttributes' => array()
));
person Steve Tingiris    schedule 30.10.2017