基于DialogFlow的Slack聊天机器人:如何实现建议回复按钮功能?
我之前在做DialogFlow对接Slack的时候也碰到过一模一样的需求——想实现类似Google Assistant建议芯片的一键发送功能,踩了几个坑后找到了两个可行的方案,给你详细说说:
方案1:用消息按钮 + Webhook回调(保留按钮样式)
虽然你觉得回传请求繁琐,但其实可以把逻辑简化到极致,核心就是让按钮点击事件触发你的Webhook,再由Webhook把指定文本转发给DialogFlow,模拟用户输入:
- 首先,确保你的DialogFlow代理已经开启了Webhook服务,并且Slack集成的事件订阅已经指向这个Webhook地址(Slack会把按钮点击事件发送到这里)
- 构造Slack消息的payload时,给按钮设置
type: "button"、name(可以统一设为suggestion方便识别)和value(这里填你希望用户点击后发送的文本),不需要url:
"slack": { "attachments": [ { "fallback": "Here is my answer", "pretext": "Here is my answer", "title": "Hello There", "title_link": "http://www.google.com", "text": "Test Custom Card", "actions": [ { "type": "button", "text": "Ask this next", "name": "suggestion", "value": "Ask this next" }, { "type": "button", "text": "Or ask this", "name": "suggestion", "value": "Or ask this" } ], "color": "#F35A00" } ] }
- 你的Webhook接收到Slack的回调请求后,提取
payload.actions[0].value的值,然后调用DialogFlow的Detect Intent API,把这个值作为用户的输入内容发送 - 最后用Slack API把DialogFlow返回的回复发送到当前频道,还可以选择更新原来的消息(移除按钮,避免用户重复点击)
方案2:用Slack快速回复(无需额外开发,更简便)
如果不需要严格的按钮样式,Slack的快速回复功能完全符合你的需求——它会在聊天输入框下方显示选项,用户点击后直接把文本输入并发送,DialogFlow能直接处理,不需要额外的Webhook:
- 直接在DialogFlow的Slack payload里配置
quick_reply字段就行:
"slack": { "text": "Test Custom Card", "quick_reply": { "items": [ { "text": "Ask this next" }, { "text": "Or ask this" } ] }, "attachments": [ { "fallback": "Here is my answer", "pretext": "Here is my answer", "title": "Hello There", "title_link": "http://www.google.com", "color": "#F35A00" } ] }
- 这个方案的好处是完全不需要额外开发,Slack会自动把快速回复的文本作为用户消息发送给DialogFlow,和用户手动输入的效果完全一样
为什么你之前的尝试无效?
- 把文本设为URL:Slack只识别合法的HTTP/HTTPS链接,非链接格式的内容会被判定为无效,所以按钮不显示
- 只设置name和value的按钮:Slack需要知道把点击事件发送到哪里,没有配置回调URL的话,点击事件不会被处理,所以机器人没响应
内容的提问来源于stack exchange,提问作者Captain Wizard
相关产品推荐
相关产品推荐

