DialogFlow 参数验证后重新提示

DialogFlow parameter reprompt after validation

我的意图是让机器人向用户询问日期。用户可能会说 todaylast weeklast monday
如果用户说的是 last weeklast month 之类的东西(基本上是不能转换成确切日期的东西),那么 bot 应该再次提示 please enter exact date to proceed

案例一:取@sys.date

我已将此实体标记为必填项并设置了提示 please enter the date,现在每次用户上周说的时候,@sys.date 都没有检测到它,并且用户一次又一次地收到相同的提示.

情况2:取@sys.date-time

如果我选择 @sys.date-time,我可以获得所有类型的输入。
如果用户说上周、上个月等,那么我将在参数值中得到 startDate,如果用户说今天,参数中将有直接值。
这也可以在 webhook for slotfilling 中处理,我们可以将参数值设置为 null 并再次调用相同的意图,因为我无法弄清楚 如何设置不同的提示

params = req['queryResult']['parameters']
date = params['date']
if 'startDate' in date:
    print('inside startDate')
    res = json.dumps({
        'followupEventInput' : {
            'name' : 'e_date',
            "parameters": {
                "date": '',                 
                }
            }
        })

通过上面的代码,意图再次被触发,但提示再次与我们在 DialogFlow 控制台中设置的相同。

我不得不将 @sys.date 作为实体,因为它提供了适合我的用例的 date.recent 选项,通过采用 @sys.date-time@sys.date-period DialogFlow 的日期捕捉是不正确的。例如,如果今天是星期二,而用户说是上星期一,那么 Dialogflow 将捕获上周的星期一,而不是最近的星期一。如果我们不采取 date.recent

,这样的情况还有很多

我建议创建一个包含训练短语的其他意图,例如:上周或上个月。然后让此响应提示用户更具体地指定日期。