2017-05-18 1 views
0

Ich entwickle eine Alexa-Fähigkeit mit Kontoverknüpfung auf einer ROR-API. Ich habe das LaunchRequest funktioniert, aber wenn ich versuche, eine IntentRequest (die 3 Steckplätze hat) zu machen, bekomme ich keinen DialogState und Alexa sagt mir nur, dass es ein Problem mit meiner Antwort gibt. Ich habe das Skill-Modell mit der Fertigkeit Beta von Amazon erstellt. Da Dialoge in der Konsole oder im Simulator nicht überprüfbar sind, ist es fast unmöglich herauszufinden, was läuft. Hier ist das Modell:Wie erstelle ich einen Dialog für eine benutzerdefinierte Alexa-Fertigkeit?

{ 
"intents": [ 
{ 
    "name": "AMAZON.CancelIntent", 
    "samples": [] 
}, 
{ 
    "name": "AMAZON.HelpIntent", 
    "samples": [] 
}, 
{ 
    "name": "AMAZON.StopIntent", 
    "samples": [] 
}, 
{ 
    "name": "RateWineIntent", 
    "samples": [...] 
    , 
    "slots": [ 
    { 
     "name": "wine", 
     "type": "AMAZON.NUMBER", 
     "samples": [ 
     "{wine}", 
     "wine {wine}", 
     "wine number {wine}" 
     ] 
    }, 
    { 
     "name": "rating", 
     "type": "AMAZON.NUMBER", 
     "samples": [ 
     "{rating}", 
     "a rating of {rating}", 
     "rate it a {rating}", 
     "give it a rating of {rating}" 
     ] 
    }, 
    { 
     "name": "taster", 
     "type": "AMAZON.NUMBER", 
     "samples": [ 
     "{taster}", 
     "taster number {taster}", 
     "taster {taster}", 
     "for taster {taster}", 
     "for taster number {taster}" 
     ] 
    } 
    ] 
}], 
"prompts": [ 
{ 
    "id": "Confirm.Intent-RateWineIntent", 
    "promptVersion": "1.0", 
    "definitionVersion": "1.0", 
    "variations": [ 
    { 
     "type": "PlainText", 
     "value": "I have a rating of {rating} on wine {wine} for taster {taster}. Is that correct." 
    } 
    ] 
}, 
{ 
    "id": "Elicit.Intent-RateWineIntent.IntentSlot-wine", 
    "promptVersion": "1.0", 
    "definitionVersion": "1.0", 
    "variations": [ 
    { 
     "type": "PlainText", 
     "value": "OK, which wine number?" 
    } 
    ] 
}, 
{ 
    "id": "Elicit.Intent-RateWineIntent.IntentSlot-rating", 
    "promptVersion": "1.0", 
    "definitionVersion": "1.0", 
    "variations": [ 
    { 
     "type": "PlainText", 
     "value": "And what rating for this wine?" 
    } 
    ] 
}, 
{ 
    "id": "Elicit.Intent-RateWineIntent.IntentSlot-taster", 
    "promptVersion": "1.0", 
    "definitionVersion": "1.0", 
    "variations": [ 
    { 
     "type": "PlainText", 
     "value": "Great. And for which taster number?" 
    } 
    ] 
} 
], 
"dialog": { 
"version": "1.0", 
"intents": [ 
    { 
    "name": "RateWineIntent", 
    "confirmationRequired": true, 
    "prompts": { 
     "confirm": "Confirm.Intent-RateWineIntent" 
    }, 
    "slots": [ 
     { 
     "name": "wine", 
     "type": "AMAZON.NUMBER", 
     "elicitationRequired": true, 
     "confirmationRequired": false, 
     "prompts": { 
      "elicit": "Elicit.Intent-RateWineIntent.IntentSlot-wine" 
     } 
     }, 
     { 
     "name": "rating", 
     "type": "AMAZON.NUMBER", 
     "elicitationRequired": true, 
     "confirmationRequired": false, 
     "prompts": { 
      "elicit": "Elicit.Intent-RateWineIntent.IntentSlot-rating" 
     } 
     }, 
     { 
     "name": "taster", 
     "type": "AMAZON.NUMBER", 
     "elicitationRequired": true, 
     "confirmationRequired": false, 
     "prompts": { 
      "elicit": "Elicit.Intent-RateWineIntent.IntentSlot-taster" 
     } 
     } 
    ] 
    } 
] 
} 
} 

und hier ist die Antwort:

{ 
"session": { 
"sessionId": "MY-SESSION-ID", 
"application": { 
    "applicationId": "MY-APPLICATION-ID" 
}, 
"attributes": {}, 
"user": { 
    "userId": "MY-USER-ID" 
}, 
"new": true 
}, 
"request": { 
"type": "IntentRequest", 
"requestId": "REQUEST-ID", 
"locale": "en-US", 
"timestamp": "2017-05-18T06:41:56Z", 
"intent": { 
    "name": "RateWineIntent", 
    "slots": { 
    "taster": { 
     "name": "taster" 
    }, 
    "rating": { 
     "name": "rating" 
    }, 
    "wine": { 
     "name": "wine" 
    } 
    } 
} 
}, 
"version": "1.0" 
} 

ich Slots füllen kann, aber es wird kein dialogState produzieren. Irgendwelche Ideen? Könnte jemand einen besseren Weg finden, das zu testen, ohne deinen Dot anzuschreien?

+0

Schreien bei echosim.io? –

+0

Nur Spaß. Ich war aufgeregt, als ich den Dialog und optionale Slots einführte. Ich hatte meine eigene endliche Zustandsmaschine für diese Art von Dingen selbst entwickelt und fand heraus, dass ich immer noch meine eigene Implementierung bevorzuge, weil ich sie unter anderem mit unittest richtig testen kann. Wenn Sie interessiert sind: https://github.com/josepvalls/ask.py –

+0

Dank @Josep, aber ich verwende ROR für das Back-End. Ich habe es schließlich herausgefunden. Ich habe die vollständige Antwort JSON nicht zurückgegeben. Ich dachte, basierend auf den Dokumenten, dass im Dialog die Antwort abgekürzt wurde. Es funktioniert jetzt wirklich sehr gut und spart viel Zeit beim manuellen Ausfüllen von Slots. – BrainstormWilly

Antwort

0

Das Problem war mit meiner Antwort. Ich gab gerade den <Directive/> Teil der Antwort zurück, basierend auf dem, was ich in den Amazon-Dokumenten las. Wo ist das Problem? Mein Vorschlag an jeden Programmierer, der mit Alexa arbeiten möchte, ist here starten. Lernen Sie die JSONs der Anfrage/Antwort kennen, da Fehler hier schwer zu testen sind. Die Dokumente von Amazon zwingen dich dazu, vor dem Programmieren etwas über das Sprachdesign zu lernen, was meiner Meinung nach den Wagen vor das Pferd stellt.

Verwandte Themen