所以现在我正在使用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
类来处理'取消'命令?或者,当用户多次发送相同的“登录”命令时,它是否应自动取消对话?看起来有点笨重,必须单独发送'取消'命令。
答案 0 :(得分:2)
我认为你错过了DefaultCase。检查this。它显示了Facebook Auth Sample的DefaultCase的实现。顺便说一句,在该示例中,他们还有一个Logout命令。
答案 1 :(得分:0)
我会考虑您的用户将如何解释对话的结束,并考虑这些情景以及人们如何结束对话。
您可以添加代码以根据特定关键字和使用GlobalMessageHandler模式处理重置或对话结束。
https://github.com/Microsoft/BotBuilder-Samples/tree/master/CSharp/core-GlobalMessageHandlers
此外,希望用户只是“挂断”&#34; /完成后关闭窗口。
一组良好的指标可以帮助收集人们如何使用机器人为业主改进它的信息。 即:交互X是否导致预期的交互Y,或者我们在此对话中看到的最后一次交互......等等。