0

Alexa에서 다음을 수행하는 기술을 개발 중입니다.Alexa conversational skill 오류

  1. 사용자 : 존
  2. 알렉사 : 안녕 존, 당신을 만나서 좋은 안녕
  3. 알렉사, 당신의 이름을 나에게
  4. 사용자를 제공 안녕하세요하시기 바랍니다. 당신에게 몇 살이
  5. 사용자 : 내 발언은 아래
    StartTheFlow Hi 
    StartTheFlow {custName} 
    StartTheFlow {age} 
    

    내 onIntent()

    @Override 
        public SpeechletResponse onIntent(final IntentRequest request, final Session session) throws SpeechletException { 
         log.info("onIntent requestId={}, sessionId={}", request.getRequestId(), session.getSessionId()); 
    
         Intent intent = request.getIntent(); 
         String intentName = (intent != null) ? intent.getName() : null; 
    
         if ("StartTheFlow".equals(intentName)) { 
          return getTheFlow(intent, session); 
         } else if ("AMAZON.HelpIntent".equals(intentName)) { 
          return getHelpResponse(); 
         } else if ("WelcomeChubb".equals(intentName)) { 
          return getWelcomeResponse(); 
         } else { 
          throw new SpeechletException("Invalid Intent"); 
         } 
        } 
    
    아래는

(25)는 내 의도 아래

{ 
    "intents": [ 
    { 
     "intent": "StartTheFlow", 
     "slots": [ 
     { 
      "name": "custName", 
      "type": "list_of_userNames" 
     }, 
     { 
      "name": "age", 
      "type": "AMAZON.NUMBER" 
     } 
     ] 
    }, 
    { 
     "intent": "AMAZON.HelpIntent" 
    },{ 
     "intent": "Welcome" 
    }, 
    { 
     "intent": "AMAZON.StopIntent" 
    }, 
    { 
     "intent": "AMAZON.CancelIntent" 
    } 
    ] 
} 

되고있다

그리고 이것을 아래와 같이 처리하려고합니다.

private SpeechletResponse getTheFlow(Intent intent, Session session) { 

     boolean isAskResponse = true; 
     String responseText = ""; 
     String nameFromSession = (String) session.getAttribute("name"); 
     if (StringUtils.isNullOrEmpty(nameFromSession)) { 
      responseText = "please give me your name"; 
      getTheNameText(intent, session); 
     } else { 
      System.out.println(session.getAttribute("nameFromSession")); 
      responseText = "please give me your date of birth"; 
     } 

     return getSpeechletResponse(responseText, "", isAskResponse); 

    } 

    private String getTheNameText(Intent intent, Session session) { 
     String userNameFrmIntent = getNameFromSlot(intent).toString(); 
     session.setAttribute("nameFromSession", userNameFrmIntent); 
     return getNameFromSlot(intent).toString(); 

    } 

    private String getNameFromSlot(Intent intent) { 
     Slot userName = intent.getSlot(Slot_Name); 
     return userName.getValue(); 
    } 

또한 상단에 다음과 같이 슬롯을 정의했습니다.

private static final String Slot_Name = "custName"; 

그러나 여기에 내가 대신 나에게 로그에 오류를주고 나에게 내 이름을 묻는, Hi를 입력 할 때 그것은 자바 NullPointer 예외를 보여줍니다. 내가 Hi을 입력했을 때받는 응답은 다음과 같습니다. 누군가가이 있으면 알려 주시기 바랍니다 수 있습니다, 누군가가 알려 주시기 바랍니다 수

{ 
    "session": { 
    "sessionId": "SessionId.a2740ca4-73ff-4a15-856d-6461b3c7b2e1", 
    "application": { 
     "applicationId": "amzn1.ask.skill.e3dfb30e-0089-423c-a325-30ad28dd2e2b" 
    }, 
    "attributes": {}, 
    "user": { 
     "userId": "amzn1.ask.account.AEQYTT5HFHEGGDSUCT3NW45HKR7O3FBL5YCBSZIS7P5LNP5BXFEMUR7AUYOZVKC2FT5V6RKJC7RNA5VMZVREBAXAQP3NFNTQSFSSKSEXIYT4FQYMS5JCI2CCAOPUF4FN4C6DHEU6ONNY3D6GN5AWK75KOQNJH2IWROIIXTPNXSNI6FLQYRBBMP7TRSOWVNCY73WJUT2VLHDACWA" 
    }, 
    "new": true 
    }, 
    "request": { 
    "type": "IntentRequest", 
    "requestId": "EdwRequestId.cf686fc0-cbfd-4496-bb09-c41714563507", 
    "locale": "en-US", 
    "timestamp": "2017-02-15T20:12:44Z", 
    "intent": { 
     "name": "StartTheFlow", 
     "slots": { 
     "custName": { 
      "name": "custName", 
      "value": "hi" 
     } 
     } 
    } 
    }, 
    "version": "1.0" 
} 

어디 내가 잘못 가고 나는이 문제를 해결할 수있는 방법, 나는 25처럼, 아주 질문의 숫자가 링크 될했습니다 자바에서 이것을하는 더 좋은 방법.

감사

답변

0

나는 사용자가 말한다 각각의 일에 대해 별도의 의도를 만드는 것이 좋습니다. 예를 들어, HelloIntent, NameIntent 및 AgeIntent입니다.

그런 다음 정보 비트를 세션의 모든 다음 인 텐트로 전달해야합니다. 따라서 각각의 의도는 처음부터 공통 함수를 사용하여 세션 (존재하는 경우)에서 각 문자열을 읽고, 새 슬롯 데이터를 추가 한 다음, 완료하기 전에 모든 문자열을 응답 세션에 다시 기록 할 수 있습니다.

의도가 다르므로 사용자가 순서가 틀릴 수도 있으므로 필요한 모든 문자열이 입력되었는지 확인하거나 사용자에게 누락 된 문자열이 있는지 확인해야 할 수 있습니다.

세션에 데이터를 저장하는 문제는 다음에 사용자가 스킬을 시작할 때 데이터가 사라지는 것입니다. 이를 해결하기 위해 데이터베이스를 사용하여 사용자 데이터를 보유하고 userId에 키를 저장합니다. 이를 수행하는 방법에 대한 많은 예제가 있습니다. 일부 데이터베이스는 기본적으로 무료이지만 다른 데이터베이스는 매월 사용되는 횟수에 따라 비용이 청구됩니다.

관련 문제