在 .Net 服务器中实施 wit.ai 操作

Implement wit.ai action in .Net server

有人可以告诉我如何在 .Net 服务器中实现机器人操作吗? .net 有任何模板或库吗?非常感谢。

有一个用于处理对话、动作等的 .NET 库

https://github.com/valencianok/Wit.ai.net

下面的解决方案基于 Wit.ai.net nuget 包。

首先,您需要为 Merge、Stop、Action、Say 设置一些处理程序:

    static object ActionHandler(string conversationId, object context, string action, Dictionary<string, List<Entity>> entities, double confidence)
    {
        Console.WriteLine("Action handler called");

        //Invoke correct action based on action name passed in by action parameter
        Actions[action].Invoke();
        return context;
    }

    static object MergeHandler(string conversationId, object context, Dictionary<string, List<Entity>> entities, double confidence)
    {
        Console.WriteLine("Merge handler called");
        return context;
    }

    static void SayHandler(string conversationId, object context, string msg, double confidence)
    {
        Console.WriteLine("Say handler called " + msg);
    }

    static object StopHandler(string conversationId, object context)
    {
        Console.WriteLine("Stop handler called");
        return context;
    }

如果你想监听从 Wit 传入的动作,ActionHandler 就是你感兴趣的那个。 "action" 参数将告诉您要执行哪个操作 运行。例如,这些可以用字典设置,其中键是动作名称,值是动作。一个例子:

    //Define actions to run based on Wit callback
    static void Action1()
    {
        Console.WriteLine("Action1 is called");
    }
    static void Action2()
    {
        Console.WriteLine("Action2 is called");
    }

    //Define actions in dictionary, key will be the action recieved from Wit response, value will be an invokable action
    static Dictionary<string, Action> Actions => new Dictionary<string, Action>
    {
        { "action1", Action1 },
        { "action2", Action2 }
    };

注意:您需要在 Wit.ai 中有一个名为 action1 或 action2 的操作才能完成此操作。例如,如果您在 Wit.ai.

中有 getNews 操作,请将其更改为 "getNews"

然后创建对话并将处理程序传递给对话:

var conversation = new WitConversation<object>(WIT_ACCESS_TOKEN, "conversation-id-123", null, MergeHandler, SayHandler, ActionHandler, StopHandler);

然后你就开始对话:

conversation.SendMessageAsync("Message to bot here").Result;

如果您需要将一些上下文密钥发送回机器人,那么您需要修改任何处理程序中的上下文参数和 return 新上下文,例如:

static object ActionHandler(string conversationId, object context, string action, Dictionary<string, List<Entity>> entities, double confidence)
{
    Console.WriteLine("Action handler called");

    //Invoke correct action based on action name passed in by action parameter
    Actions[action].Invoke();
    return new { context_key_here = "context key value" };
}

这当然是执行此操作的一种简单方法,我希望它能为您指明正确的方向。

你也可以为所有的Wit Action创建一些接口,然后在ActionHandler中获取你想要的action的实例。

我在下面的 Gist 的控制台应用程序中简单地实现了 return 从 Wit.ai api 编辑的操作。希望对你有帮助。

https://gist.github.com/SimonPirre/c2f571c4b47d0ac3defb1bc7292f456f