2017-05-18 1 views
0

J'utilise Visual Studio pour créer un bot Skype basé sur son Bot Builder SDK et utilisant l'émulateur Skype. (I am using this page) Je suis arrivé avec succès le bot pour se connecter et recevoir des messages texte régulièrement, et il répond correctement avec:C# - Impossible de faire en sorte que Skype Bot réponde à l'événement approprié

Vous avez envoyé des caractères [message] qui était [longueur]

Cependant, j'ai essayé d'ajouter un événement à déclencher lorsqu'un utilisateur est ajouté, et il devrait simplement envoyer "Bienvenue".

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"); 

    } 

Ceci est le code que j'ai actuellement. J'ai essayé d'ajouter les mêmes Connector et await lignes à la déclaration else sur la ligne 17, mais qui fait juste le répondre bot avec

Vous avez envoyé qui était 0 caractères

Si une autre information est nécessaire pour réparer cela, je serai heureux de le fournir.

Toute aide est appréciée!

EDIT: Le code que j'ai actuellement ne répond à rien. Il voit l'événement ConversationUpdate et ne fait rien avec elle

+0

'message.CreateReply (" Bienvenue ");' crée simplement un message, il ne l'envoie pas. – caesay

Répondre

0

Je ne l'ai jamais utilisé le SDK Skype mais j'imagine que ce serait ressembler à ceci si vous l'avez fait correctement:

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

Je vous suggère de prendre un tutoriel en C# et peut-être lire la documentation de skype? https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-connector


ci-dessus peut ne pas fonctionner, si vous jetez un oeil à la documentation de lien que je vous posté devrez peut-être démarrer une conversation si l'on n'existe pas déjà en utilisant la méthode CreateDirectConversationAsync.

+0

Ça a marché! Cela fait vraiment beaucoup de sens parce que je pense que la méthode 'HandleSystemMessage' est juste une méthode pour gérer les événements qui ne sont pas spécifiquement mis en œuvre. Merci beaucoup! – SamelCamel