回到旧的PostBack / ImBack按钮类型问题。
我已经看到查询寻找方法向机器人发送消息而不向用户显示任何内容。但我正在寻找一种一致的方法来实现按钮'圣杯':
PostBack是能够在不向用户显示的情况下向机器人发送值的推荐选择。但是,我实际上想向用户展示一些东西,以表明发生了什么。如果你点击一个按钮并且没有任何事情发生一两秒,用户会不耐烦地认为他们必须再次敲击按钮。
Skype和Messenger会在发送值时向用户显示显示文本,这很好。但DirectLine不会 - 直到机器人回复才会看到任何内容。
ImBack当然会在聊天Feed中显示“丑陋”'03 D 27913'值。
我很高兴只有一个按钮说“选择”,聊天提要中出现相同的“选择”,以及“03 D 27913”通过某种方式进行引导 - 跨越所有三个频道,DirectLine,Skype和Messenger。
我错过了一个明显的解决方案,还是有一个涉及渠道数据的复杂解决方案?
在没有一致答案的情况下,如果有人有兴趣,这是我目前的hacky解决方案:
在bot代码中,对除DirectLine之外的所有通道使用PostBack,DirectLine应该使用ImBack。
确定一个简单的方法来识别您想要隐藏的“丑陋价值”,例如:我的汽车注册号码前面有一个星形管道,例如* | 03 D 27913
在Skype / Messenger上,PostBack将显示“选择”并正确地发送ID。
在DirectLine /您的网络聊天页面上,您将在ImBacks中看到“丑陋的ID”。因此,在JS中使用setInterval
来选择.wc-message-from-me
并检查其子跨度是否有ID,例如: '以* |'开头,替换为'select'。
我使用100毫秒的间隔,它运作良好。随着解决方案的优雅,它是令人不快的,但可以接受。性能测试:平均0.2ms通话费用。 Profiler结果:在19.6s样本中编写0.518s脚本,包括所有其他脚本。
你现在问 - 为什么不订阅DirectLine连接的消息事件,即botConnection.activity$.subscribe(message => {...
?不幸的是,在用户输入消息的瞬间不会调用此消息 - 仅当机器人回复时,当您收到两个回调时,一个用于机器人消息,一个用于用户消息。到目前为止已经太晚了。