Actions On Google V2 Node.js:conv.data无法按预期工作问题咨询
解决conv.data存储数据后后续意图无法访问的问题
我之前也碰到过一模一样的情况,结合Google Actions官方文档和实际踩坑经验,给你梳理几个大概率的问题点和对应的解决办法:
1. 先确认会话是否还保持活跃
conv.data是会话级别的临时存储,只有在同一个对话会话里才能访问到。如果用户中途退出Assistant(比如关掉APP再重新打开),或者会话超时(默认大概5分钟左右),conv.data里的所有数据都会被清空。
- 快速排查:在后续意图的处理代码里先打印
console.log(conv.data),如果整个对象是空的,那基本就是会话断了。
2. 检查意图是否属于同一个Agent
要确保[INTENTS.INTENT_A]和后续调用的意图属于同一个Actions Agent,跨Agent的话conv.data是完全不共享的。
3. 先验证参数存储的正确性
先确认在[INTENTS.INTENT_A]里,你要存储的parameter确实有值,可以加日志排查:
[INTENTS.INTENT_A]: (conv, { parameter }) => { console.log('接收的参数值:', parameter); // 确认参数是否真的传进来了 conv.data.tempvariable = parameter; console.log('存储后的conv.data:', conv.data); // 确认存储操作成功 }
如果参数本身就是undefined,那后续自然拿不到值。
4. 后续意图里的访问方式要正确
确保后续意图的处理函数正确接收了conv对象,并且访问路径没有错:
[INTENTS.INTENT_B]: (conv) => { console.log('当前conv.data内容:', conv.data); const tempVar = conv.data.tempvariable; if (tempVar) { conv.add(`拿到的临时变量是:${tempVar}`); } else { conv.add('没找到存储的临时变量哦'); } }
注意别搞混存储作用域:
conv.data:当前会话有效,会话结束就清空conv.user.data:用户级持久化存储,跨会话可用(需要用户授权)conv.session.data:旧版本写法,现在官方推荐用conv.data
5. 排查场景切换的影响(如果用了Actions Builder)
如果你的项目用了Actions Builder的场景(Scene),要注意场景切换时的会话上下文配置。有些场景切换会默认重置会话数据,需要在场景设置里确保会话上下文被保留。
先从这几点入手排查,一般都能找到问题所在。
内容的提问来源于stack exchange,提问作者heavyweight
相关产品推荐
相关产品推荐

