2017-05-26 3 views
0

Je construis actuellement une compétence personnalisée pour Alexa en Java.Java a Alexa Compétence personnalisée demander des emplacements manquants

Je veux qu'Alexa prenne un rendez-vous en utilisant un serveur Exchange existant.

Pour le rendez-vous, je veux qu'Alexa vérifie si un nom, une date et une heure sont donnés par l'utilisateur. Je le fais en utilisant les instructions if, comme:

if (date.getValue() == null) { de askResponse de retour ("S'il vous plaît donner une date afin de créer un rendez-vous")

Ce qui se passe est Alexa demande la fente manquante, mais quand je réponds à la compétence se ferme juste. Je ne sais pas comment Alexa va reconnaître ma réponse.

code est le suivant:

public SpeechletResponse getTerminResponse(Slot name, Slot date, Slot time, Session session, IntentRequest request) throws Exception { 

    if(time.getValue() == null) { 
      return askResponse("Please insert time"); 
     } else if (date.getValue() == null) { 
      return askResponse("Please insert date"); 
     } else if (name.getValue() == null) { 
      return askResponse("Please insert name"); 
     } else { 

      try { 

       String[] datumArray = date.getValue().split("-"); 
       String[] zeitArray = time.getValue().split(":"); 

       Date startDate = new Date((Integer.parseInt(datumArray[0])-1900), (Integer.parseInt(datumArray[1])-1), (Integer.parseInt(datumArray[2])), (Integer.parseInt(zeitArray[0])), (Integer.parseInt(zeitArray[1])), 0); 
       Date endDate = new Date((Integer.parseInt(datumArray[0])-1900), (Integer.parseInt(datumArray[1])-1), (Integer.parseInt(datumArray[2])), (Integer.parseInt(zeitArray[0]))+1, (Integer.parseInt(zeitArray[1])), 0); 

       System.out.println(startDatum.toString()); 
       System.out.println(endDatum.toString()); 
       ExchangeHelper eh = new ExchangeHelper(); 
       eh.createMeeting(name.getValue(), "Test", startDate, endDate); 

       return getTellSpeechletResponse("Appointment created successfully");  

      } catch (Exception e) { 
       System.out.println(e); 
       return askResponse("Failed to create appointment"); 
      } 
     } 
} 

Voici mon Interaction Model

Toute aide serait très apprécié depuis que je recherchais documentation et des exemples pour les jours et je ne peux pas le faire fonctionner.

Meilleures salutations

+0

pouvez-vous mettre votre modèle d'interaction que vous avez fait dans le portail des développeurs? (modèle d'interaction, slots personnalisés, énoncés) –

+0

@ TaísBellini J'ai édité mon post original parce que je ne sais pas comment ajouter des images aux commentaires. S'il vous plaît excusez les intentions allemandes et les machines à sous, Datum signifie la date, Zeit signifie le temps et le nom est auto expliquant je suppose;) – MCR

+0

Ok, cette interface est nouvelle pour moi. Vous pouvez mettre les invites "S'il vous plaît insérer le temps", etc directement dans ce constructeur de compétences, pas besoin de mettre dans le code. As-tu fais ça? Si vous cliquez dans la fente vous devriez voir le champ "Invites", alors il va gérer pour vous. Ce que je suppose en ce moment, c'est que puisque vous le traitez dans le code, vos énoncés ne s'attendent pas à recevoir une seule réponse comme une entrée, donc elle se ferme parce qu'il n'y a pas de correspondance. –

Répondre

0

Pouvez-vous donner le code pour getTellSpeechletResponse? Selon la photo que vous avez jointe, vous utilisez le "nouveau" modèle de dialogue afin qu'Amazon collecte tous les emplacements pour votre intention. https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/dialog-interface-reference#directives

Très probablement vous avez oublié de renvoyer le DelegateDirective (via speechletResponse.setDirectives(...)) à amazon de dire Alexa pour prendre soin de collecter les valeurs de sous. Mais ceci peut seulement être répondu si vous envoyez le code. Je voudrais aussi voir un exemple Dialog Java par Amazon mais je ne l'ai pas encore trouvé.

Si vous utilisez ce modèle de boîte de dialogue, vous n'avez pas non plus besoin d'if elses car alexa reconnaît lui-même quels emplacements sont manquants. Vous devez marquer ceci "Est-ce que cet emplacement est requis pour satisfaire l'intention" avec oui dans le modèle d'interaction. Que vous n'avez pas non plus besoin de créer vos propres réponses, mais seulement de donner des expressions dans le modèle d'interaction pour vos 4 slots.