如何从Dialogflow意图提取参数并传递至Webhook?含具体场景需求
如何从Dialogflow意图提取参数并传递到Webhook?
一、通用技术问题解答:从意图提取参数并传递至Webhook
要实现这个需求,核心分为两个关键环节,一步步来就行:
- 第一步:在Dialogflow控制台配置参数与实体
先在目标意图里定义需要提取的参数(比如你场景里的PLACE_NAME),给它关联对应的实体——可以用系统自带的@sys.location实体(专门识别地点,准确率更高),也可以自定义实体。同时要确保训练短语里的变量部分(比如PLACE_NAME)已经被正确标记为这个参数。 - 第二步:在Webhook中读取参数
Dialogflow触发意图时,会把提取到的参数打包进请求体里传给Webhook。你只需要在Webhook的处理函数里,根据所用的集成方式(比如Actions on Google客户端、原生Webhook请求)从对应的位置取出参数即可。
二、针对intent.direction场景的具体实现
针对你提到的intent.direction意图,结合你给出的代码片段,我整理了具体的实现步骤:
1. 先确认Dialogflow侧的配置
打开intent.direction意图的参数标签页:
- 确认已经添加了
PLACE_NAME参数,并且关联了合适的实体(推荐用@sys.location系统实体); - 根据需求设置参数是否为必填,如果必填的话,还可以配置追问话术,当用户没说地点时自动询问;
- 检查训练短语里的
PLACE_NAME对应部分,已经被标记为该参数(比如选中短语里的地点词,关联到PLACE_NAME参数)。
2. 修改Webhook的makeDirection函数获取参数
从你代码里的app.ask()能看出,你用的是Actions on Google客户端,直接用app.getArgument()就能拿到参数,修改后的代码如下:
function makeDirection(app) { // 提取PLACE_NAME参数 const placeName = app.getArgument('PLACE_NAME'); if (!hasScreen) { if (!placeName) { // 如果没获取到地点,主动询问用户补充 app.ask('请问你要导航到哪个地点呢?'); } else { // 这里可以把placeName传给后续业务逻辑,比如调用导航API app.ask(`好的,我这就为你规划前往${placeName}的路线。`); } } else { // 有屏幕设备的处理逻辑,比如展示路线地图 app.ask(`正在加载前往${placeName}的路线,请稍等...`); } }
要是你用的是原生Dialogflow Webhook请求(不依赖Actions on Google客户端),就从请求体的queryResult.parameters里取参数,示例如下:
// 处理Webhook请求的核心函数 function handleWebhook(req, res) { const intentName = req.body.queryResult.intent.displayName; if (intentName === 'intent.direction') { const placeName = req.body.queryResult.parameters.PLACE_NAME; // 后续业务逻辑:比如调用导航服务、返回结果 res.json({ fulfillmentText: `正在为你规划前往${placeName}的最优路线` }); } }
注意事项
- 代码里的参数名称要和Dialogflow控制台里的完全一致(大小写敏感),比如控制台叫
PLACE_NAME,代码里就不能写成placeName; - 如果参数是可选的,一定要加判断逻辑,避免因参数缺失导致代码报错。
内容的提问来源于stack exchange,提问作者akash verma
相关产品推荐
相关产品推荐

