在 .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
有人可以告诉我如何在 .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