我正在使用 C# 语言使用 Microsoft Bot Framework V3 构建一个机器人,并尝试在用户输入任何输入之前启动对话框并通过说明“欢迎”用户。我还希望每次用户完成表单时都会重复该对话框。
我正在尝试使用 FormFlow 选项:FormOptions.PromptInStart,但仅在输入一些输入后仍然显示欢迎消息。不确定 V1 是否已弃用此功能,或者我只是做得不对。有什么建议吗??
我的类(class)如下:
消息 Controller :
internal static IDialog<MyClass> MakeRootDialog()
{
return Chain.From(() => FormDialog.FromForm(MyClass.BuildForm, options: FormOptions.PromptInStart))
.Do(async (context, order) =>
{//some actions here }
});
}
MyClass.cs:
[Serializable]
public class MyClassDialog : IDialog<object>
{
public async Task StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
}
public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
var message = await argument;
await context.PostAsync("You said: " + message.Text);
context.Wait(MessageReceivedAsync);
}
}
MyClassDialog.cs:
public class MyClass
{
public static IForm<MyClass> BuildForm()
{
OnCompletionAsyncDelegate<MyClass> processOrder = async (context, state) =>
{
await context.PostAsync("We are currently filing your order.....");
};
return new FormBuilder<MyClass>()
.Message("Welcome to my bot!")
//some actions here
.Confirm(//more actions here)
.AddRemainingFields()
.Message("Thanks for providing your inputs")
.OnCompletion(processOrder)
.Build();
}
};
最佳答案
如何实现Post方法? 我认为你在形式上没有问题,但在 Post 方法上有问题。
这段代码对我有用。
public async Task<HttpResponseMessage> Post([FromBody] Activity activity)
{
if (activity.Type == ActivityTypes.Message || activity.Type == ActivityTypes.ConversationUpdate)
{
Conversation.SendAsync(activity, MakeRootDialog);
{
}
因为如果用户连接,ActivityType 是 ConversationUpdate,没有消息。当activity.Type == ActivityTypes.ConversationUpdate 时,您也必须调用MakeRootDialog。
关于c# - 在机器人中启动对话框而不提示(适用于 C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38578042/