2016-11-22 3 views
0

может кто-нибудь показать мне, как реализовать действие бота на сервере .Net? есть ли какой-либо шаблон или liblary для .net? Большое спасибо.Реализовать действие wit.ai на .Net сервере

+0

проверить это: https://github.com/valencianok/Wit.ai.net – ssakash

+0

Что вы имеете в виду ".NET Server"? Что у вас есть служба, написанная на .NET? –

ответ

0

Существует .NET, библиотека для обработки разговоров, действий и т.д.

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

Это решение ниже основано на Wit.ai.net NuGet пакета.

Прежде всего, необходимо установить некоторые обработчики для Merge, Stop, действие, Скажи:

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; 
    } 

ActionHandler это один вы interrested, если вы хотите, чтобы слушать действия проходили в от Вит. Параметр «действие» сообщит вам, какое действие нужно выполнить. Например, они могут быть установлены со словарем, где ключ - это имя действия, а значение - действие. Пример:

//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 называется действие1 или action2, чтобы сделать эту работу. Измените его, например, на «getNews», если у вас есть действие getNews в Wit.ai.

Вы затем создать разговор и передать обработчики к разговору:

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

Тогда вы просто начать разговор:

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

Если вам нужно отправить некоторые контекстный ключ обратно в бот, то вам нужно изменить параметр контекста в любом обработчике и вернуть новый контекст, например:

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, а затем получить экземпляр действия, которое вы хотите в ActionHandler.

Я выполнил простую реализацию действий, возвращенных из Wit.ai api в консольном приложении в Gist ниже. Надеюсь, поможет.

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