c# - 如何处理用户操作

标签 c# node.js botframework

我想使用 C# 处理 Bot 框架中的用户操作。我正在向用户显示一些输入作为选择。这里用户可能不想要任何选择。所以他们可以直接输入一些命令来退出。如果用户输入退出,而不是选择选项(退出未在选择中列出),我需要处理退出。默认情况下,机器人不允许输入未列出的内容。

希望这可以通过 Node JS 来完成( Handle User Actions )。我想实现以下相同的功能。

有人可以帮助我吗?任何建议,将不胜感激。

最佳答案

If user Types Exit, instead of selecting choices (Exit is not listed in choice), i need to handle the exit. By default Bot will not allow to enter something not listed.

您可以尝试实现global message handler每当用户使用特定单词 Exit 回复对话时就会执行代码。以下代码片段供您引用。

GlobalMessageHandlersBotModule:

public class GlobalMessageHandlersBotModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
        base.Load(builder);

        builder
            .Register(c => new ExitScorable(c.Resolve<IDialogTask>()))
            .As<IScorable<IActivity, double>>()
            .InstancePerLifetimeScope();
    }
}

退出Scorable:

public class ExitScorable : ScorableBase<IActivity, string, double>
{
    private readonly IDialogTask task;

    public ExitScorable(IDialogTask task)
    {
        SetField.NotNull(out this.task, nameof(task), task);
    }

    protected override async Task<string> PrepareAsync(IActivity activity, CancellationToken token)
    {
        var message = activity as IMessageActivity;

        if (message != null && !string.IsNullOrWhiteSpace(message.Text))
        {
            if (message.Text.ToLower().Equals("exit", StringComparison.InvariantCultureIgnoreCase))
            {
                return message.Text;
            }
        }

        return null;
    }

    protected override bool HasScore(IActivity item, string state)
    {
        return state != null;
    }

    protected override double GetScore(IActivity item, string state)
    {
        return 1.0;
    }

    protected override async Task PostAsync(IActivity item, string state, CancellationToken token)
    {
        this.task.Reset();
    }
    protected override Task DoneAsync(IActivity item, string state, CancellationToken token)
    {
        return Task.CompletedTask;
    }
}

关于c# - 如何处理用户操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51684593/

相关文章:

c# - System.convert.ToString() 与 C# 中的显式类型转换

c# - 如何在 NX Open C# 中标记一行?

c# - 在运行时创建的控件的访问值

c# - 串行 COM 端口超时设置

javascript - 了解 .each() 发起的所有异步调用何时完成执行

javascript - 为什么/users 在 Express 和 Node 中路由?

node.js - Node_redis hgetall 回调函数上的 Coffeescript 变量范围

node.js - botframework v4 主动消息不通过 ActivityHandler 事件处理程序

botframework - Luis 可以用于在 MSFT Bot Framework 以外的平台上设计的机器人吗

azure - Web App Bot 和 Azure Bot 有什么区别