Dialogflow如何存储多轮对话参数并拼接后在目标意图中展示
实现方案
1. 修改firstnameletters意图处理逻辑
你当前遇到的核心问题是每次请求的alphabets参数会覆盖上一轮的值,所以需要自定义专属字段存储拼接后的结果,再回写到globalParameter上下文持久化,代码示例如下:
const first_name_letters = async (df, globalParameter) => { // 取当前轮次用户输入的字母段 const currentInput = df._request.queryResult.parameters.alphabets; // 读取历史已拼接的内容,无历史值则初始化为空字符串 const splicedName = (globalParameter.splicedName || '') + currentInput; // 将拼接后的值回写到globalParameter上下文,设置99轮生命周期保证多轮有效 df.setContext('globalparameter', 99, { splicedName: splicedName, // 回写需要保留的其他原有参数 languageCode: globalParameter.languageCode }); // 返回响应提示用户继续输入 df.setResponseText(`${currentInput.split('').join(' ')}\n\ncontinue`); }
2. 配置Thank you意图处理逻辑
用户触发「完成了」话术进入该意图时,直接读取上下文中存储的拼接完成值返回即可:
const thank_you = async (df, globalParameter) => { const finalName = globalParameter.splicedName || ''; df.setResponseText(`Thank you ${finalName}`); }
注意事项
setContext的第一个参数要和你Dialogflow控制台创建的globalParameter上下文名称完全一致,大小写敏感- 上下文生命周期设置要大于你预期的最大输入轮次,避免中途上下文失效导致拼接值丢失
- 如果需要支持用户输入错误重置,可以额外新增重置意图,触发时将
globalParameter里的splicedName清空即可
内容的提问来源于stack exchange,提问作者lakshmi
相关产品推荐
相关产品推荐

