ara*_*ao6 6 chatbot dialogflow-es
我正在使用云功能来响应webhooks,如文档中所述.在DialogFlow上,我将所有参数都设置为可选,而我想控制动态需要哪些参数.是否可以动态设置allRequiredParamsPresent?其次,我们如何偏置下一个输入/响应以填充某个参数?
用户可以输入日期或日期范围,两者都是不同的参数.需要一个或另一个,但不是两个.
不幸的是,在控制台中,如果我根据需要设置两者,对话框不会结束(这就是我想在结束时覆盖的原因),如果我不需要它们,对话结束时不会出现所有必需的参数.
此外,根据后续问题,代理人要求从Web钩子询问,我想偏向用户的下一个答案来填充特定@sys.any参数,因为它一直填充错误的参数.
我建议您对所需的每个参数使用意图,而不是使用实体。这将解决两个问题:
假设您需要 3 个参数来购买手表:颜色、日期/日期时间、成本
您的代理商将有以下意图:
对于每个意图,您都可以选择所有 3 个参数。
此外,您还需要将参数的默认值设置为$entity自身意图和#context.entity其他参数。
例如,在意图中get_color,您将具有以下参数和默认值:
color = $color
date = #buy_watch.date
cost = #buy_watch.cost
Run Code Online (Sandbox Code Playgroud)
最后,您必须调用 webhook 来实现上述所有意图。
在 webhook 中,您必须检查传入意图的参数,并根据缺少的参数 设置output_context + response_message 。
params = intent_request["query_result"]["parameters"]
case 1 --> if not params["color"]: set output_context = color and response = what color do you want
case 2 --> if not params["date"]: set output_context = date and response = when do you want to buy
case 3 --> if not params["cost"]: set output_context = cost and response = what is your budget
case 4 --> if you get all params: call event e_got_all_details
Run Code Online (Sandbox Code Playgroud)
got_all_details当您获取所有参数时,无论您以什么顺序获取它们,都会通过事件调用Intent 。
根据响应的output_context和您在意图中配置的input_context,将触发正确的意图,您将能够获得正确的值。
我遇到了类似的问题,在我看来,这是处理参数验证和处理意外值时最有效的方法(使用意图特定的后续后备意图)。
编辑 1:将有一个额外的逻辑来为日期分配值,具体取决于您从日期或日期范围实体获得的值。
if params["date"] or params["date-range"]:
date = params["date"] if params["date"] else params["date-range"]
Run Code Online (Sandbox Code Playgroud)
所有意图都将具有训练短语,这些短语将尝试在没有任何顺序的情况下捕获参数,但不将它们标记为必需。
因此,如果用户说我明天想买一块手表,buy_watch意图将通过参数日期触发。该代码将检查颜色和成本是否丢失,并在设置适当后提示output_context。
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |