如何在DialogFlow中通过意图自身的yes后续响应递归触发该意图
Dialogflow 递归触发intent实现多航段循环添加方案
不要硬做intent的递归跳转,用上下文透传+自定义事件触发的方式实现,全程不会丢失已收集的航段数据,具体操作步骤如下:
- 首先配置持久化上下文:给多程航班申请的主intent绑定输出上下文
multi_flight_booking,上下文生命周期设置为15-20轮(足够覆盖多航段添加的对话轮次),在上下文里定义数组类型参数collected_segments,专门用来存储已经收集完成的航段信息。 - 调整航段收集的流转逻辑:每收集完一个航段的出发地、目的地、出行时间等必填信息、校验通过后,不要直接跳流程,先把当前航段的结构化数据push到
collected_segments数组里,再向用户发送确认话术:「当前航段已保存,是否需要添加下一个航段?」 - 配置确认环节的分支路由:
- 肯定分支:把用户回复yes、对、要加、再来一段这类肯定表述的语料归到这个分支,触发时不要直接跳转回多程申请intent的初始入口,而是触发自定义事件
add_new_segment,透传当前上下文里的collected_segments参数,把事件的触发目标绑定到多程申请intent里「单个航段信息收集」的流程节点,直接进入下一轮航段信息采集,和首次添加航段的交互逻辑完全一致。 - 否定分支:把用户回复no、不用了、够了这类否定表述的语料归到这个分支,触发时清空
multi_flight_booking上下文,直接进入所有航段信息核对、生成航班申请单的后续流程即可。
- 肯定分支:把用户回复yes、对、要加、再来一段这类肯定表述的语料归到这个分支,触发时不要直接跳转回多程申请intent的初始入口,而是触发自定义事件
- 如果你用webhook处理后端校验和数据存储,不需要在控制台手动配事件触发,在收集完单个航段的接口响应里直接返回followupEvent结构即可,参考格式:
{ "followupEventInput": { "name": "add_new_segment", "parameters": { "collected_segments": 已收集的航段结构化数组 }, "languageCode": "zh-CN" } }
避坑提醒:不要直接从头触发多程航班申请的主intent,这种方式会重置上下文参数,直接导致之前已经收集到的航段数据全部丢失。
- 补充兜底逻辑:每次进入单个航段收集节点时,先判断
collected_segments的参数类型,如果不是数组就初始化为空数组,避免上下文过期导致的流程报错。
内容的提问来源于stack exchange,提问作者Gokul S Pillai
相关产品推荐
相关产品推荐

