2017-05-02 7 views
0

Java 기술 키트로 내 Alexa의 기술을 만들려고하고 있는데 대화 인터페이스를 사용하고 싶습니다. 베타로 스킬 빌더를 사용하여 Dialog 모델을 만들었지 만 이제 대화 상자를 위임하기 위해 웹 서비스를 통해 반환해야하는 것을 이해하지 못합니다.Alexa의 Java SDK와 함께 Dialog 지시어를 사용하는 방법

대화 상자의 다음 차례를 처리하기 위해 Alexa에게 명령을 보내려면 어떤 클래스를 사용해야합니까? 또한, IntentRequest 클래스에 dialogState 속성이 없습니다.

답변

1

우선 dialogState 속성은 IntentRequest에 있습니다. 나는 1.3.1 버전의 의존성 (maven)을 사용한다. 값을 얻으려면 yourIntentRequestObject.getDialogState()을 사용하십시오.

<dependency> 
      <groupId>com.amazon.alexa</groupId> 
      <artifactId>alexa-skills-kit</artifactId> 
      <version>1.3.1</version> 
</dependency> 

당신은 onIntent 방법에 Speechlet 일부 샘플 사용을 참조 아래 :

 if ("DoSomethingSpecialIntent".equals(intentName)) 
     { 

      // If the IntentRequest dialog state is STARTED 
      // This is where you can pre-fill slot values with defaults 
      if (dialogueState == IntentRequest.DialogState.STARTED) 
      { 
       // 1. 
       DialogIntent dialogIntent = new DialogIntent(intent); 

       // 2. 
       DelegateDirective dd = new DelegateDirective(); 
       dd.setUpdatedIntent(dialogIntent); 

       List<Directive> directiveList = new ArrayList<Directive>(); 
       directiveList.add(dd); 

       SpeechletResponse speechletResp = new SpeechletResponse(); 
       speechletResp.setDirectives(directiveList); 
       // 3. 
       speechletResp.setShouldEndSession(false); 
       return speechletResp; 
      } 
      else if (dialogueState == IntentRequest.DialogState.COMPLETED) 
      { 
       String sampleSlotValue = intent.getSlot("sampleSlotName").getValue(); 
       String speechText = "found " + sampleSlotValue; 

       // Create the Simple card content. 
       SimpleCard card = new SimpleCard(); 
       card.setTitle("HelloWorld"); 
       card.setContent(speechText); 

       // Create the plain text output. 
       PlainTextOutputSpeech speech = new PlainTextOutputSpeech(); 
       speech.setText(speechText); 

       return SpeechletResponse.newTellResponse(speech, card); 
      } 
      else 
      { 
       // This is executed when the dialog is in state e.g. IN_PROGESS. If there is only one slot this shouldn't be called 
       DelegateDirective dd = new DelegateDirective(); 

       List<Directive> directiveList = new ArrayList<Directive>(); 
       directiveList.add(dd); 

       SpeechletResponse speechletResp = new SpeechletResponse(); 
       speechletResp.setDirectives(directiveList); 
       speechletResp.setShouldEndSession(false); 
       return speechletResp; 
      } 
     } 
  1. 만들기 새로운 DialogIntent
  2. DelegateDirective를 만들고 updatedIntent 속성에 할당을
  3. shoulEndSession 플래그를 false으로 설정하십시오. 그렇지 않으면 Alexa ter 세션을 minates

SkillBuilder 내에서 Intent를 선택하려면 적어도 하나의 슬롯이 있어야합니다. 발언 및 프롬프트 구성. 프롬프트 내에서 {slotNames}를 사용할 수도 있습니다.

-alal