如何处理 Amazon Alexa 中的域外话语

How to handle out of domain utterances in Amazon Alexa

我在技能上有不同的意图,我正在使用 php 作为服务。 一切正常,但如果用户询问未在任何意图中配置的话语,则必须转到 else 部分。

例如代码如下:-

if($EchoReqObj->request->type=="LaunchRequest"){
  $text = "Testing launch";
  $array = array("version"=>"1.0","response"=>array("outputSpeech"=>array("type"=>"PlainText","text"=>$text),"shouldEndSession"=>false));
  echo json_encode($array);
 }
else if(getting the intent name){//Do something.}
else{

  $text = "In else part";
  $array = array("version"=>"1.0","response"=>array("outputSpeech"=>array("type"=>"PlainText","text"=>$text),"shouldEndSession"=>false),"sessionAttributes"=>array("lastSpeech"=>$text));
  echo json_encode($array);
}

这是我写的 else 但它没有被执行。

Alexa 始终尝试映射到最接近的意图,无论用户输入是什么。没有意图,你不会得到 IntentRequest。因此,如果您有五个意图,Alexa 将尝试将所有用户话语与这五个技能的意图之一相匹配。

当 Alexa 触发尚未处理的意图时,您的其他部分将执行。从您的示例代码中, SessionEndedRequest 可能会进入您的其他部分。但是如果你试图处理域外的话语,你必须使用 AMAZON.Fallback 意图并在你的后端处理它。

AMAZON.FallbackIntent

如果您想处理域外请求、乱码或意想不到的话语,或者当用户说出的内容与您的技能中的任何意图不符时,您必须使用预定义的 AMAZON.FallbackIntent.此意图使用基于您的交互模型生成的域外模型,并为与您的任何技能意图不匹配的用户话语提供回退。

更多关于 AMAZON.FallbackIntent here