我创建了一个 LUIS 根对话框,它根据意图创建对话框。我找到了一个示例代码来执行主动机器人消息,但它似乎不适用于框架的 v3.9.0。
我添加了一个 Conversation Starter 类:
public class ConversationStarter
{
public static string ResumptionCookie;
SurveyDialog, then wait until that's done
public static async Task Resume()
{
var message = Microsoft.Bot.Builder.Dialogs.ResumptionCookie.GZipDeserialize(ResumptionCookie).GetMessage();
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
{
var botData = scope.Resolve<IBotData>();
await botData.LoadAsync(CancellationToken.None);
var stack = scope.Resolve<IDialogStack>();
var dialog = new CreateTradeAfterInterrupt();
stack.Call(dialog.Void<object, IMessageActivity>(), null);
await stack.Poll(CancellationToken.None);
await botData.FlushAsync(CancellationToken.None);
}
}
}
“stack.Poll”方法已被删除。这个新版本的框架是否有等价物?如果我将此行注释掉,则根本不会发生中断。
我在 MessageController 级别设置了 Resumption Cookie:
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
ConversationStarter.ResumptionCookie = new ResumptionCookie(activity).GZipSerialize();
await Conversation.SendAsync(activity, MakeLuisDialog);
}
else
{
HandleSystemMessage(activity);
}
var response = Request.CreateResponse(HttpStatusCode.OK);
return response;
}
我有另一个控制器,用于将事件发布到并执行:
await ConversationStarter.Resume();
CreateTrade 对话框是一个简单的对话框,它调用 PromptDialog.Choice 并为用户提供购买/出售股票等的选项。
知道为什么这不起作用吗?