【发布时间】:2020-12-09 08:21:06
【问题描述】:
我的机器人有一张菜单卡,我最近发现它不适用于团队。我想使用 imBack 方法让消息显示在聊天中。我自己可以通过以下方式完成此操作:
// For directline/webchat
"type": "Action.Submit",
"title": "Get Order Status",
"data": "Get Order Status"
},
// For MS Teams
"type": "Action.Submit",
"title": "Get Order Status",
"data": {
"msteams": {
"type": "imBack",
"value": "Get Order Status"
},
},
但是,如果我使用直线/网络聊天版本,我会在 Teams 中收到一般机器人错误(我认为该错误是因为该按钮未创建 imBack 消息,因此 LUIS 查询为空,并且我的所有代码都引用了 LUIS topIntent 和 score 等属性失败。由于机器人设计,LUIS 需要每回合调用一次。)同样,如果我使用 Teams 版本,出于同样的原因,我会在直线/网络聊天中遇到一般机器人错误。起初,我尝试添加其他对象,例如我为 msteams 为其他频道 ID 创建的对象,但这并没有改变行为。根据here 的信息,我能够添加 text 属性并将其从 context.activity.value 复制到 context.activity.text 通过以下方式:
// In my card definition
"type": "Action.Submit",
"title": "Get Order Status",
"data": {
"msteams": {
"type": "imBack",
"value": "Get Order Status"
},
"text": "Get Order Status"
},
// In my onMessage handler
if (context.activity.channelData.postBack) {
context.activity.text = context.activity.value.text;
}
当我以这种方式实现它时,它确实在技术上在两个渠道中都有效。但是,菜单选择(在本例中为 Get Order Status)不会作为来自用户的消息(并且通过扩展,不会显示在聊天记录中)出现在聊天窗口中,用于 directline/网络聊天频道(它适用于团队频道)。我真的希望它的行为方式与我的直接/网络聊天唯一实现中的数据属性中的文本相同。有什么方法可以设置卡片(例如,通过不同格式的数据对象来根据频道发送不同的数据)和/或 onMessage 处理程序,以便在单击按钮时,无论频道如何,文本都会显示在聊天窗口中,并且通过扩展该文本将通过 LUIS,这样我就不会因为 LUIS 属性为空而收到机器人错误?
我的想法是为团队创建一个单独的卡片助手,并根据 channelId 从我的菜单意图中调用它,但如果可能的话,我想要一个更优雅的解决方案,特别是因为我有几个不同的带有类似提交按钮的卡片。
【问题讨论】:
-
这个问题很难理解,我怀疑至少有一条信息你忘了包括。您首先说您有一个可行的解决方案,然后没有解释就说您尝试了不同的方法。目前尚不清楚您要解决什么问题,目前似乎有几种可能性。您是否可能说问题在于 imBack 操作在 Teams 中没有显示文本?您是不是说您不希望两个频道使用两种不同的格式?无论哪种方式,都不清楚您的两个代码块之间的行为有何不同。
-
imBack 没有直接显示文本。如果我采用直接显示它的格式,它在团队中不起作用。如果我有一种在团队中显示它的格式,它就不能直接使用。但如果它不显示在团队中,整个事情就会出错。
-
很抱歉,但这仍然不能解释问题。我想明确一点,当我说“显示文本”时,我的意思是消息在脚本窗口中呈现,我不一定指的是卡片操作的
displayText属性。当您说 imBack 时,您是在谈论字符串提交操作还是实际的 imBack 卡操作(仅在 Bot Framework 卡中而不是自适应卡中)?你读过这篇博文吗? blog.botframework.com/2019/07/02/… -
如果您的格式适用于每个频道,为什么不让您的机器人根据频道 ID 发送不同的卡片?你所说的“如果它没有在团队中显示,整个事情就会出错”是什么意思?您是在谈论显示卡片还是呈现操作消息?什么是“整件事”,它出错意味着什么?我认为您应该认真考虑重写您的问题,以解释您实际尝试做什么以及为什么。
-
我会尝试您的第一个建议,并稍后尝试编辑问题。我希望我可以拥有一种可以跨多个渠道工作的单一格式,而不是使用单独的卡片格式。这就是自适应卡片的用途,对吧?
标签: node.js botframework microsoft-teams adaptive-cards web-chat