Alexa Intent发送两个请求并失败

时间:2017-02-12 23:08:31

标签: alexa-skill

我要做的是:

我有一个非常简单的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"到我的服务器并正确返回cardoutputSpeech

如果我要求提供意图,它会向我的服务器发送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请求和我发送回亚马逊的响应编写日志文件。我也在使用测试工具,但这给了我The remote endpoint could not be called, or the response it returned was invalid.。我知道它可以调用我的端点,因为我看到每次写入的日志文件。

为什么要调用我的意图,然后通过结束会话导致错误?

2 个答案:

答案 0 :(得分:0)

尝试使用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>"
    }
  }
}

答案 1 :(得分:0)

您收到的错误... endpoint could not be called, or the response it returned was invalid表示您发送回Alexa服务的json格式不正确。您正在收到请求,这是记录的方式。现在,您只需要对发回的响应进行故障排除。这可能是次要的。以下是json响应格式的文档:https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html。如果你可以从php代码共享json输出,那么帮助排除故障会更容易。

另外,我认为您需要更改为'shouldEndSession' => false

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