You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Alexa Show触摸事件未转发至技能,会话结束无SessionEndedRequest咨询

解决Alexa技能触控屏幕后无SessionEndedRequest的问题

我之前帮不少开发者碰到过类似的情况,咱们来理清楚问题根源和可行的解决方案:

为什么会出现这个情况?

当带屏幕的Alexa设备(比如Echo Show)加载了BodyTemplate1这类纯展示型的显示指令后,用户触摸屏幕会触发设备的静默终止会话逻辑——这是Alexa针对触控交互的默认行为,目的是快速响应用户的中断操作,但可惜的是这种场景下不会发送SessionEndedRequest,这就导致依赖这个请求做状态清理的技能没法正常执行后续操作。

可行的解决方案

1. 替换展示模板为带交互控件的类型

别再用纯展示的BodyTemplate1了,换成支持可点击元素的模板(比如BodyTemplate2/BodyTemplate3或者ListTemplate1),给屏幕上的元素绑定自定义Intent(比如TouchExitIntent)。这样用户触摸屏幕时,设备会发送你绑定的Intent请求,而不是直接终止会话:

  • 举个实际例子:在模板里添加一个“退出”按钮,将其与自定义的ExitIntent绑定。用户点击后,你的技能会收到这个Intent,此时你可以主动调用this.emit(':tell')或者this.emit(':sessionEnded')来正常结束会话,同时触发SessionEndedRequest;或者直接在这个Intent的处理逻辑里完成状态清理操作。

2. 给状态存储添加超时兜底机制

既然SessionEndedRequest不是100%可靠,那咱们就得加个兜底方案:在存储会话状态的时候,给每条数据设置TTL(过期时间)。比如参考Alexa的会话超时规则,设置15分钟的过期时间(Alexa默认是无交互8秒进入等待,等待1分钟后彻底终止会话)。这样哪怕没收到SessionEndedRequest,过期后的状态数据也会自动被清理,不会一直占用存储资源。

3. 检查技能的会话配置

确认一下你在Alexa开发者控制台的「会话设置」里,是否开启了“允许用户中断会话”?不过这个设置主要影响语音交互,对你碰到的触控场景影响不大,但还是建议检查一下,确保技能的会话逻辑配置正确。另外也要确认你的技能端点能正常接收所有Alexa请求,避免因为网络或端点配置问题导致请求丢失。

总结

目前这种触控直接终止会话不发送SessionEndedRequest的情况是Alexa设备的默认行为,暂时没法强制设备改变这个逻辑。所以最稳妥的方式是结合上面的两种方案:调整显示模板的交互逻辑,同时给状态存储加上超时兜底,这样就能覆盖所有场景下的状态清理需求了。

内容的提问来源于stack exchange,提问作者Connor Bishop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:11:27