我是开发Alexa Skills的新手。我正在为西班牙商店开发Skill,所以我使用的是es-ES语音。我使用Node.js ASK-SDK,遇到了这个问题:
当我尝试使用重新提示进行对话时,如果用户说胡言乱语,那不会触发我的任何话语,我希望输入错误处理程序,因为它是canHandle == true的那个,但是实际结果是,该杂乱无章被Alexa检测并分类为正确的话语之一。我已经看到在美国,您有AMAZON.Fallback可以防止出现此问题,但是由于西班牙语SDK都没有,我如何检测到这一点?
I've upload a demo project to emulate this behaviour
您可以尝试以下工作流程:
以下是“等等等等”的JSON输入示例
{
"version": "1.0",
"session": {
"new": false,
"sessionId": "amzn1.echo-api.session.55b928a6-ecb2-4b55-857e-af6a76dee6fe",
"application": {
"applicationId": "amzn1.ask.skill.dd0b7ffd-b408-489a-ab5e-a7d7b8d05da3"
},
"user": {
"userId": "amzn1.ask.account.AFWPOWCRQULHUVKQTTX7JIS3O264CCHSUY4MPHCSJS4LKLQX45YARJ67LTGHPMS7RWUXVNYUTXT6JMT3DICTL5YZ7QHSLZ3QIHEKDP5YRPLCAEFXTD4BRY6WJIKC36UO3QU4F5X5BLFAGX6C3KN76MQJETO5PY6I65CVNOFBQLGNZ3P4YN4IOLYBCC7NDGAQ6LFAWMWTKT6DWQY"
}
},
"context": {
"System": {
"application": {
"applicationId": "amzn1.ask.skill.dd0b7ffd-b408-489a-ab5e-a7d7b8d05da3"
},
"user": {
"userId": "amzn1.ask.account.AFWPOWCRQULHUVKQTTX7JIS3O264CCHSUY4MPHCSJS4LKLQX45YARJ67LTGHPMS7RWUXVNYUTXT6JMT3DICTL5YZ7QHSLZ3QIHEKDP5YRPLCAEFXTD4BRY6WJIKC36UO3QU4F5X5BLFAGX6C3KN76MQJETO5PY6I65CVNOFBQLGNZ3P4YN4IOLYBCC7NDGAQ6LFAWMWTKT6DWQY"
},
"device": {
"deviceId": "amzn1.ask.device.AETBPXRLKFDMVR23WFUFQ3HOFTGHQDISLOQAPWS4BDBD4FAGXUKW2P56RJ3G74C75HG63MS52UV7KFYJAENEVT6VIRZUEKWCQQHNGV3FMP6BM3A5JZCUXH2LRYDHLQLBH5ABDJ7EYRWUI5532NYEZLUCYIGMRZCM2WKQ3XG6NX5VZPOELTKUO",
"supportedInterfaces": {}
},
"apiEndpoint": "https://api.eu.amazonalexa.com",
"apiAccessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJhdWQiOiJodHRwczovL2FwaS5hbWF6b25hbGV4YS5jb20iLCJpc3MiOiJBbGV4YVNraWxsS2l0Iiwic3ViIjoiYW16bjEuYXNrLnNraWxsLmRkMGI3ZmZkLWI0MDgtNDg5YS1hYjVlLWE3ZDdiOGQwNWRhMyIsImV4cCI6MTU0MjM1OTg1NCwiaWF0IjoxNTQyMzU2MjU0LCJuYmYiOjE1NDIzNTYyNTQsInByaXZhdGVDbGFpbXMiOnsiY29uc2VudFRva2VuIjpudWxsLCJkZXZpY2VJZCI6ImFtem4xLmFzay5kZXZpY2UuQUVUQlBYUkxLRkRNVlIyM1dGVUZRM0hPRlRHSFFESVNMT1FBUFdTNEJEQkQ0RkFHWFVLVzJQNTZSSjNHNzRDNzVIRzYzTVM1MlVWN0tGWUpBRU5FVlQ2VklSWlVFS1dDUVFITkdWM0ZNUDZCTTNBNUpaQ1VYSDJMUllESExRTEJINUFCREo3RVlSV1VJNTUzMk5ZRVpMVUNZSUdNUlpDTTJXS1EzWEc2Tlg1VlpQT0VMVEtVTyIsInVzZXJJZCI6ImFtem4xLmFzay5hY2NvdW50LkFGV1BPV0NSUVVMSFVWS1FUVFg3SklTM08yNjRDQ0hTVVk0TVBIQ1NKUzRMS0xRWDQ1WUFSSjY3TFRHSFBNUzdSV1VYVk5ZVVRYVDZKTVQzRElDVEw1WVo3UUhTTFozUUlIRUtEUDVZUlBMQ0FFRlhURDRCUlk2V0pJS0MzNlVPM1FVNEY1WDVCTEZBR1g2QzNLTjc2TVFKRVRPNVBZNkk2NUNWTk9GQlFMR05aM1A0WU40SU9MWUJDQzdOREdBUTZMRkFXTVdUS1Q2RFdRWSJ9fQ.H50aG2L-K_AH-vRQ4ueu6n8GY_3T14KVjJysJjpWaAJEMfVlkx6CNwnQjDQJZHd1GQ1UpqcT3AkpqGDg86Z2J50RDmRp5ScUqqMQu0ZjrCxG9hItwT02ca4wxEo_hFrMb5VTTgqSORbfgzmDHJMOVaWjb_zJAcAFCJrF3qxzYzEo-E2ptBdRb7xKY0y_3MisF302HTUiZC3uTiRvWxv3jMT0_vq9cXDoHOar_WDf7Q6afF4DrEj6naX_vRpHT-63nWug1TiKRaJY4sEEaTlX0BVDigJ7t1LuH76ULeDEpJrSNW3mQtrHqUCnFNRYe9_-ru-rf-NkMpotYE7glWNnZg"
},
"Viewport": {
"experiences": [
{
"arcMinuteWidth": 246,
"arcMinuteHeight": 144,
"canRotate": false,
"canResize": false
}
],
"shape": "RECTANGLE",
"pixelWidth": 1024,
"pixelHeight": 600,
"dpi": 160,
"currentPixelWidth": 1024,
"currentPixelHeight": 600,
"touch": [
"SINGLE"
]
}
},
"request": {
"type": "IntentRequest",
"requestId": "amzn1.echo-api.request.fef2e2fc-b404-4729-85b4-e8ced71b6ecd",
"timestamp": "2018-11-16T08:17:34Z",
"locale": "es-ES",
"intent": {
"name": "NumberTwoIntent",
"confirmationStatus": "NONE"
}
}
}
如何防止这种情况?我希望输入该错误,因为它是唯一可以针对“等等等等”发声返回true的处理程序,因此,请告诉用户其语音存在错误,但是由于它是根据发声来分类的,因此,返回用户未要求的一些信息。
谢谢
答案 0 :(得分:2)
由于没有AMAZON.FallbackIntent
,Alexa总是尝试将其映射到最接近的意图。
ErrorHandler
,该错误不在try / catch内,或者没有可以满足的意图处理程序(包括UnhandledIntentHandlers
)请求。请勿混淆ErrorHandlers
和UnhandledIntentHandlers
。 ErrorHandlers
用于处理错误,UnhandledIntentHandler
是/应作为IntentHandler
用于处理未处理的意图。
在您的情况下,每次映射意图时,即使是乱语。结果,总会有一个意图处理程序,而ErrorHandler
永远不会被调用。
由于无法使用AMAZON.Fallback
,请尝试以下操作:
1。验证插槽:
请考虑以下话语:
[BuyProductIntent]
Utterances:
I want a large pizza
give me a large pizza
可以更改为
I want a {size} {product}
give me a {size} {product}
其中
size-> regular, medium, large
product->pizza, burger
现在,只要您的后端收到BuyProductIntent
请求,请验证插槽并以适当的消息响应。如果有些BuyProductIntent
被一些乱码触发了,则插槽将不会被填充,因此您可以认为有些不正确。然后,您可以像这样回应。
"Sorry, I didn't understand. Do you want to order pizza"
这不是一个完整的解决方案,但是从某种意义上说,这将帮助您减少此问题。此外,验证广告位始终是个好主意。
2。添加OutOfDomainIntent
创建一个OutOfDomainIntent
,并添加一些您的技能将不支持的完全乱码和言语,并以适当的错误消息进行响应。确保这不会影响您的交互模型设计或VUI。对此请务必小心,除非您知道自己在做什么,否则请不要这样做。 不推荐。
答案 1 :(得分:2)
在没有 FallbackIntent 的语言环境中处理域外言语的推荐策略应尽可能广泛,以使模型确实可以处理和尝试识别人们可能想在领域之外询问您的技能,并以另一种意图来抓住它们,最终将针对这些情况提供额外的答案。
因此,总体建议是:
每个Intent提供7至50个发音,请尝试提供代表性的发音样本,以确保您会为同一个Intent捕获很多变化
确保您没有相同或相似的不同意图的言语(当模型选择意图时,这将提供不可预测的结果)
如果您的意图包含广告位,请对其进行验证,如果值不符合您的期望,则通知用户。您可以自己在后端验证插槽,或者最近才添加,validate slots via dialog management。请注意,如果验证失败后需要从用户那里获得有效的广告位值,则可以使用slot elicitation
请勿创建带有大量随机言语的意图,因为您可能会为此技能弄乱模型,也可能为此创建插槽。权衡是不值得的。如果仍然需要解决方法,请尝试this
您可以创建一个意图来处理您可能会想到的域外话语。例如,在美国,很多技能都有一种可以应付人们所说的
请勿依赖catch all handlers(canHandle()
设置为始终返回true)来帮助您解决此问题。一些示例使用UnhandledIntentHandler
并误导人们以为域外话语将由它处理,如果没有FallbackIntent
则不会。同样,请勿依赖通过ErrorHandler
添加的addErrorHandlers()
,因为它只会触发代码中的实际错误,而该错误不在try / catch内
一旦Amazon.FallbackIntent
在您的语言环境中可用,就实施它,并摆脱您自己的域外意图和/或解决方法(如果有)