我在RootDialog中遇到无限循环问题。我在这里想要实现的是创建一个聊天机器人,当用户加入对话时发送欢迎消息。没有更多的交互,只有ActivityTypes.ConversationUpdate上的单个消息 - 这就是全部。
代码中没有任何花哨的东西:
MessageController.cs
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
using Dialogs;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Connector;
[BotAuthentication]
public class MessagesController : ApiController
{
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.ConversationUpdate)
{
await Conversation.SendAsync(activity, () => new RootDialog());
}
var response = Request.CreateResponse(HttpStatusCode.OK);
return response;
}
}
RootDialog.cs
using System;
using System.Threading.Tasks;
using Microsoft.Bot.Builder.Dialogs;
[Serializable]
public class RootDialog : IDialog<object>
{
public async Task StartAsync(IDialogContext context)
{
await context.PostAsync("Message");
context.Done(this);
}
}
结果:
正如你所看到的那样,它永远不会真正退出RootDialog - 或者一遍又一遍地调用RootDialog。我一直在寻找答案,找不到任何有用的东西。文档指向使用context.Done(this)作为结束对话框的一种方式,但显然它在这里不起作用。
我找不到任何合理的解释为什么会发生这种情况,我会对任何建议感到高兴。