AMAZON.LITERAL插槽无返回,Alexa技能对接Web API求助
解决Alexa技能转发用户原始输入到Web API的问题
兄弟,我帮你捋捋这个问题——你用AMAZON.LITERAL插槽拿不到值,根本原因是这个插槽类型早就被亚马逊官方弃用啦!现在它完全不提供功能,不管你加多少示例值都没用。下面给你几个靠谱的替代方案,完美实现把用户所有输入转发到Web API的需求:
方案1:用AMAZON.SearchQuery插槽(最省心的选择)
这个插槽就是专门用来捕获用户的自然语言输入的,能很好地保留原始表述,操作步骤很简单:
- 新建一个意图(比如叫
ForwardInputIntent就行) - 给这个意图加一个类型为
AMAZON.SearchQuery的插槽,命名成userInput - 在意图的样本 utterance 里,写几个类似这样的句式:
不用写太多,只要让Alexa明白这个插槽是用来承接用户后续所有内容的就行ForwardInputIntent {userInput} ForwardInputIntent tell me {userInput} ForwardInputIntent say {userInput} - 之后在你的技能后端代码里,直接从
request.intent.slots.userInput.value就能拿到用户的原始输入内容
方案2:用AMAZON.FallbackIntent捕获所有漏网输入
如果想让技能不管用户说啥都能接住,FallBack Intent是绝佳选择:
- 先在技能控制台里手动开启
AMAZON.FallbackIntent(默认可能没开) - 这个意图不需要额外加插槽,你直接从请求的
request.inputTranscript字段就能获取用户完整的语音转文字内容——不管用户说的是啥,这个字段都会返回完整的转录文本 - 小提醒:有些地区可能限制这个意图的可用性,记得确认下你的技能部署区域支持它
方案3:自定义Catch-All意图(适合需要更灵活控制的场景)
要是上面两种方案都不符合你的需求,你可以自己搞一个万能捕获意图:
- 新建一个意图,比如叫
CatchAllIntent - 给它加一堆覆盖各种场景的样本utterance,比如:
{catchAll}a {catchAll}the {catchAll}what is {catchAll}- 尽量多写不同开头的句式,这样Alexa会把用户的所有输入都匹配到这个意图里
- 给这个意图加一个自定义插槽
catchAll,别给这个插槽设置任何值(留空就行),这样Alexa就会把用户的输入全塞进这个插槽里
最后说个小要点
不管用哪种方案,你都要确保后端代码正确拿到用户输入(要么是插槽值,要么是inputTranscript),然后把这个内容转发到你的Web API,再把API返回的结果整理成Alexa能识别的响应格式返回就好啦。
内容的提问来源于stack exchange,提问作者user6269864
相关产品推荐
相关产品推荐

