Dialogflow Messenger快速回复按钮点击后无法被ES识别匹配问题
Dialogflow Messenger快速回复按钮点击不识别问题原因与修复方案
问题复现与相关配置
在Dialogflow Messenger中实现点击即输入的快速回复按钮时,使用的自定义Payload配置如下:
{ "richContent": [ [ { "event": { "parameters": {}, "languageCode": "en", "name": "yes" }, "type": "button", "text": "Yes", "link": "", "icon": { "type": "chevron_right", "color": "#FF9800" } }, { "link": "", "type": "button", "event": { "parameters": {}, "name": "no", "languageCode": "en" }, "text": "No", "icon": { "type": "chevron_right", "color": "#FF9800" } } ] ] }
配置后按钮可正常渲染,但点击Yes/No按钮时Dialogflow ES无法识别输入,异常效果如下:
手动输入yes/no文本时可正常匹配业务逻辑,正常效果如下:
问题产生原因
按钮配置中使用了event字段,Dialogflow Messenger点击该类按钮时,不会发送按钮上的text文本走自然语言匹配链路,而是直接向Dialogflow发送指定名称的事件调用请求。
当前Dialogflow ES代理中仅配置了匹配yes/no文本的训练短语,没有注册名称为yes、no的自定义事件,也没有给目标响应意图绑定对应事件,因此事件请求无法命中预期意图,触发识别异常。
修复方案
两种方案二选一即可:
方案1:保留事件触发模式,给目标意图绑定对应事件(推荐)
该方案不需要修改前端Payload配置,仅需调整Dialogflow ES控制台配置:
- 进入Dialogflow ES控制台,找到手动输入
yes/no时命中的目标意图,打开编辑页 - 找到意图配置中的
Events输入栏,分别添加yes、no两个事件(事件名大小写敏感,必须和Payload中event.name字段值完全一致) - 保存意图,等待代理训练完成后即可生效,点击按钮会直接触发对应意图,和手动输入文本效果一致。
方案2:修改Payload配置,让按钮点击后直接发送文本
如果不需要使用事件触发能力,想让按钮点击行为完全等价于手动输入对应文本,可以修改自定义Payload,移除event字段,添加postback字段指定要发送的文本内容,修改后的按钮配置示例:
{ "richContent": [ [ { "type": "button", "text": "Yes", "link": "", "postback": "Yes", "icon": { "type": "chevron_right", "color": "#FF9800" } }, { "type": "button", "text": "No", "link": "", "postback": "No", "icon": { "type": "chevron_right", "color": "#FF9800" } } ] ] }
配置更新后,点击按钮会直接发送postback对应的文本内容,走原有文本匹配逻辑即可正常命中意图。
内容的提问来源于stack exchange,提问作者DoubleSpeed
相关产品推荐
相关产品推荐

