c# - 在机器人中启动对话框而不提示(适用于 C#)

标签 c# dialog bots botframework

我正在使用 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/

相关文章:

javascript - Discord JS 嵌入 react 导致另一个嵌入

c# - 将 C# 用于实时应用程序

c++ - 如何禁用窗口 "Show"动画?

java Android - 两个对话框,防止第一个对话框在第二个对话框退出后关闭

dialog - 在 showOpenDialogSync 中以编程方式设置项目选择

javascript - 我如何包含数组?

bots - 自动填充消息 Telegram

javascript - 从 ajax 获取数据到 mvc 操作

c# - 临时清除Linux中的终端

c# - C# 根据键对字典列表进行排序