如何在DialogFlow(Flask_DialogFlow后端)跨意图传递参数并跳过后续提问
实现DialogFlow跨意图传参并跳过参数询问的方案
要把drive.read.yes里的path参数传给transform.word2pdf.yes的word_path,同时避免机器人询问word_path,核心是用上下文传递参数+参数默认值绑定,具体步骤如下:
1. 配置上下文传递参数
- 打开DialogFlow控制台,找到
drive.read.yes意图,在输出上下文区域添加一个自定义上下文,比如命名为drive_path_collected,生命周期设为2(足够覆盖后续转换意图的触发即可)。 - 在这个输出上下文的参数栏里,添加键值对:
path: #drive.read.yes.path,意思是把当前意图的path参数存入这个上下文。 - 接着找到
transform.word2pdf.yes意图,在输入上下文区域添加刚才创建的drive_path_collected,确保该意图能识别到携带参数的上下文。
2. 设置word_path的默认值
- 进入
transform.word2pdf.yes的参数配置页,找到word_path参数,在默认值输入框里填写#drive_path_collected.path。 - 这个格式的作用是:从名为
drive_path_collected的上下文里读取path参数,作为word_path的默认值。只要上下文存在且包含该参数,DialogFlow就会自动填充word_path,不会触发参数询问。
3. Flask后端的辅助处理(可选)
如果需要在webhook里主动控制上下文传递,可以在drive.read.yes的处理函数中手动生成上下文:
from flask import Flask from flask_dialogflow import Dialogflow, Response app = Flask(__name__) df = Dialogflow(app, '/webhook') @df.intent('drive.read.yes') def handle_drive_read(req): # 获取当前意图的path参数 file_path = req.query_result.parameters.get('path') # 构造输出上下文,携带path参数 custom_context = { "name": "drive_path_collected", "lifespanCount": 2, "parameters": {"path": file_path} } # 返回响应并带上上下文 return Response(text="已获取文件路径,准备转换为PDF", contexts=[custom_context]) @df.intent('transform.word2pdf.yes') def handle_word2pdf(req): # 直接获取已填充的word_path参数 target_path = req.query_result.parameters.get('word_path') # 执行PDF转换逻辑 return Response(text=f"正在转换文件 {target_path} 为PDF,请稍候...")
4. 验证配置
- 确认
transform.word2pdf.yes的word_path参数仍设为必填,因为默认值会优先覆盖必填校验,不会触发提问。 - 测试对话流:触发
drive.read→ 回答路径 → 触发transform.word2pdf→ 机器人直接进入转换逻辑,不再询问word_path。
内容的提问来源于stack exchange,提问作者Mujtaba Faizi
相关产品推荐
相关产品推荐

