Bot Framework:如何退出对话?
Posted
技术标签:
【中文标题】Bot Framework:如何退出对话?【英文标题】:Bot Framework: How to exit Conversation? 【发布时间】:2016-09-04 16:32:23 【问题描述】:所以现在我正在使用Microsoft.Bot.Builder.Dialogs.Conversation.SendAsync
和Microsoft.Bot.Builder.Dialogs.Conversation.ResumeAsync
来实现一种暂停和恢复对话的方法,但似乎不可能“退出”或回到以前的状态。它卡在对话对话框中。
我是否只执行“取消”命令?如果是这样,我需要清除哪些数据才能恢复到原始状态?
public static readonly IDialog<string> dialog = Chain
.PostToChain()
.Switch(
new Case<Message, IDialog<string>>((msg) =>
var regex = new Regex("login", RegexOptions.IgnoreCase);
return regex.IsMatch(msg.Text);
, (ctx, msg) =>
return Chain.ContinueWith(new ChatDialog(msg),
async (context, res) =>
var token = await res;
//var valid = await Helpers.ValidateAccessToken(token);
//var name = await Helpers.GetProfileName(token);
var name = "User";
context.UserData.SetValue("name", name);
return Chain.Return($"You are logged in as: name");
);
)
).Unwrap().PostToUser();
所以如果我发送一个“登录”,它将开始一个新的ChatDialog
对话,但它似乎陷入了这种状态。即使我尝试发送另一个命令,它也会继续要求登录。我是否实现另一个Case
类来处理“取消”命令?还是应该在用户多次发送相同的“登录”命令时自动取消对话?必须单独发送“取消”命令似乎有点笨拙。
【问题讨论】:
只是想知道,你找到解决方案了吗?我也有同样的问题。 【参考方案1】:我认为您缺少 DefaultCase。检查this。它显示了 Facebook Auth 示例的 DefaultCase 的实现。顺便说一句,在那个示例中,他们还有一个 Logout 命令。
【讨论】:
【参考方案2】:我会考虑您的用户将如何解释对话的结束,并考虑这些场景以及人们如何结束对话。
您可以添加代码来处理基于特定关键字的重置或对话结束,并使用 GlobalMessageHandler 模式。
https://github.com/Microsoft/BotBuilder-Samples/tree/master/CSharp/core-GlobalMessageHandlers
此外,希望用户在完成后只是“挂断”/关闭窗口。
一套好的指标可以帮助收集有关人们如何使用机器人的信息,以便所有者改进它。 即:交互 X 是否导致了预期的交互 Y,或者我们在此对话中看到的最后一次交互是什么......等等。
【讨论】:
以上是关于Bot Framework:如何退出对话?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Bot Framework 的测试函数中访问用户和对话数据
如何自动将用户信息传递给 Bot Framework 对话实例,而不将其作为显式消息发布在聊天窗口中?
在一定时间后取消提示或对话框 - Bot Framework