c# - Не удается заставить Skype Bot реагировать на соответствующее событие

Я использую Visual Studio для создания бота Skype на основе их SDK Bot Builder и эмулятора Skype. (Я использую эту страницу ) Я успешно заставил бота подключаться и получать обычные текстовые сообщения, и он правильно отвечает:

Вы отправили [сообщение] длиной [длина] символов

Тем не менее, я попытался добавить событие для запуска при добавлении пользователя, и он должен просто отправить «Добро пожаловать».

public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{

        if (activity.Type == ActivityTypes.Message)
        {

            ConnectorClient connector = new ConnectorClient(new System.Uri(activity.ServiceUrl));

            int length = (activity.Text ?? string.Empty).Length;


            Activity reply = activity.CreateReply($"You sent {activity.Text} which was {length} characters");

            await Conversation.SendAsync(activity, () => new Dialogs.RootDialog());
        }

        else
        {

            HandleSystemMessage(activity);

        }
        var response = Request.CreateResponse(HttpStatusCode.OK);
        return response;
}

private Activity HandleSystemMessage(Activity message)
{
    //The other if statements are the rest of the activity types
    if (message.Type == ActivityTypes.ConversationUpdate)
    {
        // Handle conversation state changes, like members being added and removed
        // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
        // Not available in all channels

        Activity reply = message.CreateReply("Welcome");

    }

Это код, который у меня есть в настоящее время. Я попытался добавить те же строки Connector и await в оператор else в строке 17, но это просто заставило бота ответить

Вы отправили 0 символов

Если какая-либо другая информация необходима, чтобы исправить это, я буду рад предоставить ее.

Любая помощь приветствуется!

РЕДАКТИРОВАТЬ: код, который у меня сейчас есть, ничего не отвечает. Он видит событие ConversationUpdate и ничего с ним не делает.


person SamelCamel    schedule 18.05.2017    source источник
comment
message.CreateReply("Welcome"); просто создает сообщение, а не отправляет его.   -  person caesay    schedule 18.05.2017


Ответы (1)


Я никогда не пользовался Skype SDK, но думаю, что если вы сделаете это правильно, это будет выглядеть примерно так:

public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
    var connector = new ConnectorClient(new Uri(activity.ServiceUrl));
    Activity reply = null;

    if (activity.Type == ActivityTypes.Message)
    {
        int length = (activity.Text ?? string.Empty).Length;
        reply = activity.CreateReply($"You sent {activity.Text} which was {length} characters");
    }
    else if (activity.Type == ActivityTypes.ConversationUpdate)
    {
        reply = message.CreateReply("Welcome");
    }

    if (reply != null) 
    {
        await connector.Conversations.SendToConversationAsync((Activity)reply);
    }
}

Я бы посоветовал вам пройти учебник по C # и, возможно, прочитать документацию по скайпу? https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-connector


Вышеупомянутое все еще может не работать, если вы посмотрите на ссылку на документы, которую я разместил, вам может потребоваться начать разговор, если он еще не существует, используя метод CreateDirectConversationAsync.

person caesay    schedule 18.05.2017
comment
Это сработало! Это на самом деле имеет большой смысл, потому что я думаю, что метод HandleSystemMessage — это просто метод для обработки событий, которые специально не реализованы. Спасибо большое! - person SamelCamel; 18.05.2017