在那里。我正在尝试实现“主动瀑布”对话框以从外部服务启动对话框。
我已经实现了名为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:我已经更改了机器人到控制器的绑定机制,现在IBot
和IBot
使用相同的单例NotifyController
,这具有没有的作用。 问题仍然相关