主动式瀑布对话框不会在Microsoft Bot中继续运行

时间:2020-05-19 07:51:59

标签: c# .net botframework

在那里。我正在尝试实现“主动瀑布”对话框以从外部服务启动对话框。

我已经实现了名为CompoenentDialog的{​​{1}},并在SimpleDialogWithCardAndActions中对其进行了配置,现在我可以手动启动此对话框并单击按钮后继续对话框。可以按预期工作。

然后我创建了Controller的操作方法,该方法将启动主动对话框

IBot

此代码已成功执行并按预期显示卡,我什至可以点击按钮并发送活动并在 private async Task BotCallback(ITurnContext turnContext, CancellationToken cancellationToken) { var conversationStateAccessors = conversationState.CreateProperty<DialogState>(nameof(DialogState)); var dialogs = new DialogSet(conversationStateAccessors); var dialogAccessor = conversationState.CreateProperty<SimpleDialogWithCardAndActionsState>(nameof(SimpleDialogWithCardAndActionsState)); dialogs.Add(new SimpleDialogWithCardAndActions(dialogAccessor)); var dc = await dialogs.CreateContextAsync(turnContext, cancellationToken); var results = await dc.ContinueDialogAsync(cancellationToken); if (results.Status == DialogTurnStatus.Empty) { await dc.BeginDialogAsync(nameof(SimpleDialogWithCardAndActions), null, cancellationToken); await conversationState.SaveChangesAsync(dc.Context, false, cancellationToken); } await userState.SaveChangesAsync(turnContext, false, cancellationToken); await conversationState.SaveChangesAsync(turnContext, false, cancellationToken); } 中进行处理,但不会继续在IBot中进行瀑布对话。我想上下文已经丢失了,但是正如您在上面看到的,我已经保存了await dc.ContinueDialogAsync(cancellationToken);,它也作为单调注入到ConvesationState和Controller中。

我的问题是:如果在IBot中从控制器的IBotFrameworkHttpAdapter中启动了主动瀑布对话框,是否可以继续该对话框?如果有可能,我该怎么办以及我做错了什么?

仅供参考:IBot仅用于访问IBotFrameworkHttpAdapter和启动对话框,而ITurnContext未使用它。通知控制器和IBot的实现是否都可以使用相同的BotAdapter实例?

UPD:我已经更改了机器人到控制器的绑定机制,现在IBotIBot使用相同的单例NotifyController,这具有没有的作用。 问题仍然相关

0 个答案:

没有答案