Dialogflow意图查询集成测试如何实现请求时间模拟
Dialogflow 集成测试中模拟请求时间的实现方案
你当前使用的是Dialogflow Legacy v1 版本的
/query接口,这类接口识别「3天后」「下周一」这类相对时间表述时,默认计算基准是请求到达Dialogflow服务端的实时时间 + 请求体传入的timezone时区值。官方文档没有单独开放“手动指定基准时间”的公开入参,但有稳定的实现方式可以满足你的测试需求。
核心实现方法
最常用且无额外依赖的方式,是通过会话上下文注入隐含的时间基准参数。
你示例中写的contexts字段是简化的字符串数组写法,实际该字段支持传入完整的上下文对象。你只需要在上下文的参数中加入referenceTime字段,传入你指定的模拟基准时间,接口就会以这个时间作为所有相对时间计算的起点,而非实时服务端时间。
改造后的请求示例:
curl https://api.dialogflow.com/v1/query?v=20150910 \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer YOUR_CLIENT_ACCESS_TOKEN' \ -d '{ "contexts": [ { "name": "shop", "parameters": { "referenceTime": "2015-06-02T00:00:00-04:00" } } ], "lang": "en", "query": "remind me in 3 days to call mom", "sessionId": "12345", "timezone": "America/New_York" }'
按上述参数发请求时,接口解析「in 3 days」得到的目标日期就是你预期的2015年6月5日,和你手动指定的模拟基准时间完全对齐。
落地注意事项
- 传入的
referenceTime必须是带时区偏移的ISO8601标准格式,偏移值要和你指定的timezone匹配(America/New_York时区在夏令时对应UTC-4偏移,冬令时对应UTC-5偏移),否则参数会被接口忽略,自动回退为服务端实时时间做计算 referenceTime是会话级全局参数,只要在当前sessionId对应的任意上下文中传入,该会话下所有的相对时间识别都会使用这个基准时间。测试完成后可单独清除该上下文,即可恢复默认的实时时间计算逻辑- 该传参逻辑对Dialogflow v2正式版接口完全兼容,如果后续你从当前的v1旧接口迁移到v2版本,只需要把
referenceTime放到v2请求对应的上下文参数中即可,不需要调整已有的实体识别配置
内容的提问来源于stack exchange,提问作者snickers_stickers
相关产品推荐
相关产品推荐

