【发布时间】:2018-03-19 16:24:13
【问题描述】:
我在响应松弛对话框后更新交互式消息时遇到了一些问题。我在 node.js 服务器上使用 botkit。
这是我的工作流程:
- 用户通过斜杠命令触发交互式消息
- 用户单击该消息上的按钮
- 弹出一个对话框,用户填写表单并验证
- 在服务器端做了一些事情
- 第一条消息应该更新
现在,这是我正在使用的逻辑:
- 用户通过斜杠命令触发交互式消息
没什么花哨的,我用:
controller.on('slash_command', function (bot, message)
然后我解析命令,并发送适当的消息,带有适当的附件(按钮)
- 用户点击该消息上的按钮
同样,我用的是botkit发送的事件:
controller.on('interactive_message_callback', function (bot, message)
然后我创建一个对话框:
var dialog = bot.createDialog(
'Which book?',
JSON.stringify(callback),
'Ok'
)
在这里,我正在做一些非常(非常)肮脏的事情,不应该这样做。但这是我发现在填充对话框后更新初始消息的唯一方法。
callback_id 实际上包含一个对象,带有初始消息的response_url(以及用于标识表单的内容)。
- 弹出一个对话框,用户填写表单并验证
- 在服务器端做了一些事情
这里,我再次使用botkit提供的事件:
controller.on('dialog_submission', function (bot, message)
然后我解析message.submission.callback_id 并检测response_url。有了这个,我可以创建一个我称之为originalMessage的对象。
- 第一条消息应该更新
目前我正在使用:
bot.replyInteractive(originalMessage, 'DONE, everything is saved.');
originalMessage包含第一条消息的response_url。
确实有效。第一条消息正在被新消息替换。
但我对这个解决方案真的不满意,我想知道我是否在某个地方遗漏了什么。我见过几个应用程序具有这种类型的工作流程,所以一定有办法。
感谢您的帮助:)
【问题讨论】:
-
你想出办法了吗?我有点坚持同样的事情,想要整理触发触发 dialog_submission 事件的对话框的原始消息。我以为我可以用 delete_original 回复Interactive,但没有参考原始问题消息...
-
不幸的是,我仍然将
response_url存储在callback_id中。基本上,一旦你有了 originalMessage 的 url,你就可以使用replyInteractive和一个新对象,你可以在其中粘贴你的response_url、团队和用户。这就是我正在做的事情,并且有效。这真是肮脏的方式...... -
哇,感觉很脏。我现在的想法是在单击打开对话框的按钮后删除我的消息。然后,当对话完成并且某些操作已完成处理时,我会添加一条新消息或耳语以反映这一点。如果感觉干净,则需要进行试验。谢谢@RomOne
-
是的,其实我也是这么想的。似乎好多了!唯一的问题是,如果用户按下取消,他们将一无所有。
-
是的,这就是我仍然不喜欢的缺点。他们必须再次提示机器人工作流程。我检查了松弛 API 通道,看起来取消按钮没有回调。还不确定如何处理。