node.js - 如何处理在 Microsoft Bot Framework 中留在屏幕上但不再有效的按钮的点击?
问题描述
我对某事有点困惑。我们正在使用 Microsoft Bot Framework 构建一个机器人(v3——我知道,我知道,它很旧,但这是他们希望我们做的),在启动时,我们使用按钮为用户提供两种路径选择。它工作正常,但在用户单击后按钮仍保留在屏幕上,这是正常的。我们是否应该在我们离开他们的实际使用点之后尝试处理用户点击按钮?也就是说,假设我们已经通过了所有的瀑布并回到了根对话框?我们如何检测这些点击并拦截它们并给出适当的反馈(例如“那不是一个有效的选择”?)。
目前,在用户点击甚至到达我们的根对话框之前似乎有一些路由正在进行——
> ChatConnector: message received. UniversalBot("*") routing <null> from
> "emulator" Library("BotBuilder").findRoutes() explanation:
> ActiveDialog(0.1) ...BotBuilder:prompt-text - WARN: Prompt - no
> intent handler found for null ...BotBuilder:prompt-text -
> Session.send() ...BotBuilder:prompt-text - Session.sendBatch() sending
> 1 message(s)
一个通用的“我不明白。请再试一次。” 回复是自动发送的,似乎来自botbuilder/systemResources.js
. 那么,这是正确的和期望的行为吗?
我有点困惑,因为我认为消息总是会到达根对话框,我们将有机会在那里对其进行评估。我在根对话框中放置了一个断点,但是当我单击“已使用”按钮时它永远不会到达它。
感谢您的任何见解!
解决方案
我遇到过类似的情况。我有几种形式作为自适应卡,还有英雄卡的轮播。我所做的是确保按钮点击(或点击)返回的一些数据对于每个表单都是唯一的。然后,当我期待一个表单时,我会检查它是否正确,否则任何其他内容(包括没有 luis 意图的消息)都会被拒绝,并且我要求用户回答当前问题或在循环返回步骤时取消。
例如,在这个按钮的数据中
"actions": [
{
"type": "Action.Submit",
"title": "Submit",
"data": {
"x": 13
}
}
...
]
我会添加具有唯一值的“表单”或“对话框”,您可以在需要特定表单/卡片时检查这些值。在我只期望文本的其他地方,我只是忽略表格并重新提出问题。
我不是 NodeJs 的工作原理,但在 C# 中,按钮(以及带有 MessageBack/PostBack 的 CardActions)位于 Context.Activity.Value 下,而文本响应位于 Context.Activity.Text 中
推荐阅读
- python - 如何从python字典中的元组键中获取值
- mysql - 如果在蜘蛛关闭且原因完成时 process_item 没有完成会发生什么?
- javascript - 变量作为参数导致问题
- r - 在列上保留某种类型,在 R 中的列上只保留一种类型?
- docusignapi - DocuSign - 非管理员用户的“JWT Grant”?
- bash - 为什么这个算术运算在 GNU bash 中不起作用?
- java - 有没有办法在 Swing 的自定义绘制图表中间显示一个项目?
- java - BitmapFactory.decodeStream 导致:D/skia: --- 无法创建带有消息“未实现”的图像解码器
- python - 从列表中打开文本文件以通过 for 循环
- c# - 在文本文件中从多个数据库表中写入信息的更有效方式