这有点建立在主动用例示例的基础上,我有一个简单的用例:
是否可以通过某种方式检索或重新创建iDialogue对象来激活FormDialog,以便可以使用适当的表单触发context.Call,而不是仅向用户重放活动消息?
我尝试过使用各种各样的东西,但没有任何东西出现在用户端;具体来说,我试过了
await Conversation.SendAsync(message, () => new MakeSomeFormDialog());
和
Chain.From(() => FormDialog.FromForm(SomeForm.BuildForm, FormOptions.PromptInStart));
和交互式示例 -
Task Interactive(IDialog form) where T : class
然而,我认为这个交互式的例子,但我认为这是试图发布到bot?
答案 0 :(得分:0)
事实证明这是相当直接的。我向代表求助,我指出了正确的方向。
涵盖此案例的主动机器人示例位于https://github.com/MicrosoftDX/botFramework-proactiveMessages
公共类ConversationStarter { //注意:当然你不想要这个。最终,您需要将其保存在某个表中 //将此作为静态变量意味着我们只能记住一个用户:) public static string resumptionCookie;
//This will interrupt the conversation and send the user to SurveyDialog, then wait until that's done
public static async Task Resume()
{
var message = ResumptionCookie.GZipDeserialize(resumptionCookie).GetMessage();
var client = new ConnectorClient(new Uri(message.ServiceUrl));
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
{
var botData = scope.Resolve<IBotData>();
await botData.LoadAsync(CancellationToken.None);
var stack = scope.Resolve<IDialogStack>();
//interrupt the stack
var dialog =new SurveyDialog();
stack.Call(dialog.Void<object, IMessageActivity>(), null);
await stack.PollAsync(CancellationToken.None);
//flush dialog stack
await botData.FlushAsync(CancellationToken.None);
}
}
}
获取上下文并使用另一个对话框(可以是表单对话框)中断