如何用JOVO的tell方法响应Alexa/Google且不结束会话?有无类似shouldEndSession的方法?
你说的没错,JOVO里的tell()方法确实会默认结束会话,这就是为啥你每次测试完都得重新打开技能/动作——它对应Alexa的shouldEndSession: true,一响应完会话就直接断开了。下面给你两种解决思路,帮你实现“响应后不结束会话”的需求:
解决方法
1. 用ask()替代tell()(推荐)
JOVO专门设计了ask()方法来处理“响应后保持会话打开”的场景,它会自动适配Alexa和Google平台的会话参数(Alexa的shouldEndSession、Google的expectUserResponse),兼容性拉满。用法很直观:
// 基础写法:直接带响应内容+引导语 return this.$response .ask('这是你的问题答案,还有其他问题要问吗?') .send(); // 拆分响应内容与提示语的写法(适合多语言或复杂场景) return this.$response .speak('针对你问题的具体回答') .reprompt('请问还有其他问题吗?') .send();
这里的reprompt()是备用提示——如果用户没及时回应,平台会自动播放这句话,确保会话能持续下去。
2. 手动修改会话状态(特殊场景使用)
如果你确实需要用类似tell()的方式发送响应,但又不想结束会话,可以手动修改对应平台的会话参数:
针对Alexa平台
直接调用Alexa技能的setShouldEndSession(false)方法:
return this.$alexaSkill .tell('这是你的问题答案') .setShouldEndSession(false) .send();
针对Google Assistant平台
调用Google Action的setExpectUserResponse(true)方法:
return this.$googleAction .tell('这是你的问题答案') .setExpectUserResponse(true) .send();
跨平台通用写法
想一次适配两个平台?用JOVO的通用响应对象就行,它会自动把参数转换成对应平台的格式:
return this.$response .speak('这是你的问题答案') .setShouldEndSession(false) .send();
小提醒
- Alexa平台:如果设置
shouldEndSession: false,响应里最好带上引导用户继续交互的提示语,不然可能会被平台判定为无效响应,导致会话意外结束。 - Google Assistant平台:
setExpectUserResponse(true)后,同样需要确保响应内容能引导用户继续提问,避免会话超时。
内容的提问来源于stack exchange,提问作者Richard Sun
相关产品推荐
相关产品推荐

