Je débute dans l'écriture de compétences Alexa et souhaite écrire une compétence pour mémoriser les mots du locuteur.
Par exemple, si je dis "Alexa, enregistrez {tout ce que je dis}", les mots doivent être sauvegardés dans une chaîne.
Maintenant, d'après ce que je comprends, le schéma d'intention devrait ressembler à quelque chose
{
intents:[
"intent" : "SaveIntent"
]
}
et des énoncés comme
SaveIntent save
SaveIntent store
Dans ce cas, comment stocker "{tout ce que je dis}"?
Pour capturer une entrée vocale de forme libre (plutôt qu'une liste définie de valeurs possibles), vous devez utiliser le type d'emplacement Amazon.LITERAL
. La documentation Amazon du type d'emplacement Literal décrit un cas d'utilisation similaire au vôtre, dans lequel une compétence est créée pour extraire n'importe quelle phrase et l'afficher sur un site de média social. Ceci est fait en créant une intention StatusUpdate:
{
"intents": [
{
"intent": "StatusUpdate",
"slots": [
{
"name": "UpdateText",
"type": "Amazon.LITERAL"
}
]
}
]
}
Puisqu'il utilise le type d'emplacement Amazon.LITERAL
, cette intention pourra capturer toute phrase arbitraire. Toutefois, pour que le moteur de traitement de la parole capture correctement les expressions du monde réel, vous devez fournir une variété d'énoncés d'exemple qui ressemblent au genre de choses que l'utilisateur s'attend à dire.
Étant donné que dans le scénario que vous avez décrit, vous essayez de capturer des phrases {très} dynamiques, il y a quelques éléments dans la documentation que vous voudrez accorder une attention supplémentaire aux points suivants:
Si vous utilisez le type Amazon.LITERAL pour collecter du texte au format libre avec de grandes variations dans le nombre de mots qui pourraient être dans la fente, notez ce qui suit:
- Couvrant cette gamme complète (minimum, maximum et tous entre les deux) volonté nécessite un très grand nombre d'échantillons. Essayez de fournir plusieurs centaines échantillons ou plus pour traiter toutes les variations de mots de valeur d’emplacement en tant que Noté ci-dessus.
- Gardez les phrases dans les emplacements suffisamment courts pour que les utilisateurs puissent prononcez la phrase entière sans avoir besoin de faire une pause.
Une longue entrée parlée peut conduire à des expériences de moindre précision, alors évitez concevoir une interface de langage parlé qui nécessite plus que quelques-uns mots pour une valeur de fente. Une phrase qu'un utilisateur ne peut pas parler sans la pause est trop longue pour une valeur de slot.
Cela dit, voici l'exemple des exemples de locutions de la documentation:
StatusUpdate après la mise à jour {est arrivé | UpdateText}
StatusUpdate après la mise à jour {l'heure du dîner | UpdateText}
StatusUpdate après la mise à jour {à midi | UpdateText}
... (plus d'échantillons montrant des phrases de 4 à 10 mots)
StatusUpdate après la mise à jour {va passer à l'épicerie ce soir | UpdateText}
Si vous fournissez suffisamment d'exemples de longueurs différentes pour donner une image précise de la gamme d'énoncés utilisateur attendus, votre intention sera alors en mesure de capturer avec précision des phrases dynamiques dans des cas d'utilisation réels, auxquelles vous pourrez accéder dans l'emplacement UpdateText
. Sur cette base, vous devriez être capable de mettre en œuvre une intention spécifique à vos besoins.
Important: Amazon.LITERAL est obsolète à partir du 22 octobre 2018. Les compétences plus anciennes construites avec Amazon.LITERAL continuent de fonctionner, mais vous devez quitter Amazon.LITERAL lorsque vous mettez à jour ces compétences plus anciennes et pour toutes les nouvelles compétences.
Au lieu d'utiliser Amazon.LITERAL, vous pouvez utiliser un emplacement personnalisé pour amener Alexa à faire passer le texte de flux libre dans le backend.
Vous pouvez utiliser cette configuration pour le faire:
{
"interactionModel": {
"languageModel": {
"invocationName": "siri",
"intents": [
{
"name": "SaveIntent",
"slots": [
{
"name": "text",
"type": "catchAll"
}
],
"samples": [
"{text}"
]
}
],
"types": [
{
"name": "catchAll",
"values": [
{
"name": {
"value": "allonymous isoelectrically salubrity apositia phantomize Sangraal externomedian phylloidal"
}
},
{
"name": {
"value": "imbreviate Bertie arithmetical undramatically braccianite eightling imagerially leadoff"
}
},
{
"name": {
"value": "mistakenness preinspire tourbillion caraguata chloremia unsupportedness squatarole licitation"
}
},
{
"name": {
"value": "Cimbric sigillarid deconsecrate acceptableness balsamine anostosis disjunctively chafflike"
}
},
{
"name": {
"value": "earsplitting mesoblastema outglow predeclare theriomorphism prereligious unarousing"
}
},
{
"name": {
"value": "ravinement pentameter proboscidate unexigent ringbone unnormal Entomophila perfectibilism"
}
},
{
"name": {
"value": "defyingly amoralist toadship psoatic boyology unpartizan merlin nonskid"
}
},
{
"name": {
"value": "broadax lifeboat progenitive betel ashkoko cleronomy unpresaging pneumonectomy"
}
},
{
"name": {
"value": "overharshness filtrability visual predonate colisepsis unoccurring turbanlike flyboy"
}
},
{
"name": {
"value": "kilp Callicarpa unforsaken undergarment maxim cosenator archmugwump fitted"
}
},
{
"name": {
"value": "ungutted pontificially Oudenodon fossiled chess Unitarian bicone justice"
}
},
{
"name": {
"value": "compartmentalize prenotice achromat suitability molt stethograph Ricciaceae ultrafidianism"
}
},
{
"name": {
"value": "slotter archae contrastimulant sopper Serranus remarry pterygial atactic"
}
},
{
"name": {
"value": "superstrata shucking Umbrian hepatophlebotomy undreaded introspect doxographer tractility"
}
},
{
"name": {
"value": "obstructionist undethroned unlockable Lincolniana haggaday vindicatively tithebook"
}
},
{
"name": {
"value": "unsole relatively Atrebates Paramecium vestryish stockfish subpreceptor"
}
},
{
"name": {
"value": "babied vagueness elabrate graphophonic kalidium oligocholia floccus strang"
}
},
{
"name": {
"value": "undersight monotriglyphic uneffete trachycarpous albeit pardonableness Wade"
}
},
{
"name": {
"value": "minacious peroratory filibeg Kabirpanthi cyphella cattalo chaffy savanilla"
}
},
{
"name": {
"value": "Polyborinae Shakerlike checkerwork pentadecylic shopgirl herbary disanagrammatize shoad"
}
}
]
}
]
}
}
}
Vous pouvez essayer d'utiliser le type d'emplacement Amazon.SearchQuery . Donc, votre intention serait quelque chose comme ça
{
"intents": [
{
"intent": "SaveIntent",
"slots": [
{
"name": "UpdateText",
"type": "Amazon.SearchQuery"
}
]
}
]
}
à la fin de 2018, j'utilise SearchQuery
pour obtenir tout ce que dit l'utilisateur.
Cela fonctionne, et je l'ai sur les systèmes de production.
Mais vous devez demander quelque chose à l'utilisateur et remplir la case.
Par exemple:
query
(choisissez le nom de votre choix)I want to watch {query}
ou {query}
ou I want {query}
const message = 'What movie do you want to watch?'
handlerInput
.responseBuilder
.speak(message)
.reprompt(message)
.addElicitSlotDirective('query')
.getResponse();
Updated: Cette réponse n'est pas vraie. mentionné dans les commentaires, il y a le type d'emplacement Amazon.Literal
qui devrait permettre cela.
Alexa ne prend actuellement pas en charge l'accès à la saisie vocale brute des utilisateurs. Cela peut être possible à l'avenir, ou vous pouvez regarder une autre API de synthèse vocale telle que Google .
La seule façon de faire cela actuellement avec Alexa serait d’avoir une liste de mots que l’utilisateur pourrait dire que cela sauverait.
Pour ce faire, vous pouvez suivre l'un des exemples d'Amazon concernant l'utilisation d'un logement personnalisé type . Ensuite, mettez tous les mots possibles que l'utilisateur dirait dans cette catégorie.
(8/5/17) Malheureusement, cette fonctionnalité a été supprimée d'Amazon avec l'élimination d'Amazon.LITERALS.
Cependant, selon votre intérêt à capturer des entrées de forme libre, vous pouvez être satisfait d'une entrée MODE
qui capture un mot, nom, ville, numéro, lettre, symbole, etc. une seule variable sans message entre les deux.
J'ai travaillé sur un mode de saisie du mot de passe qui peut être modifié pour collecter et concaténer les entrées de l'utilisateur. Bien que votre saisie soit plus lente, si vous optimisez votre fonction lambda, vous pourrez obtenir une expérience utilisateur rapide en saisissant quelques phrases. La structure est ce qui est important. Le code pourrait facilement être adapté.
Comment donner une entrée à la chaîne mixte de Alexa Alexa Skills Kit (ASK) avec des nombres?https://stackoverflow.com/a/45515598/8408056