2017-08-21 1 views
0

Bonjour, J'ai créé mon premier bot de test en utilisant Microsoft BotFramework en C#. dans private async Task<Activity> HandleSystemMessage(Activity message) en if (message.Type == ActivityTypes.ConversationUpdate) normalement, il devrait informer un nouveau membre ajouté au groupe ou quelqu'un a frappé le bouton de démarrage de bot dans Telegram Messenger. Quand je le teste en mode débogage en utilisant l'émulateur BotFramework, tout fonctionne parfaitement, mais après l'avoir publié, je vois qu'après avoir appuyé sur le bouton démarrer dans Telegram messenger, mon code n'a pas fonctionné. Mon code dans ActivationType.ConversationUpdateConversationUpdate ne se déclenche pas après la publication

foreach (var item in message.MembersAdded) 
       { 
    try 
    { 
     using (var dbcontext = new WatermarkBotDBEntities()) 
     { 
      dbcontext.BotUsers.Add(new BotUser() 
      { 
       AddedFriends = 0, 
       ConversationID = message.Conversation.Id, 
       ServiceUrl = message.ServiceUrl, 
       UserID = message.From.Id 
      }); 
     dbcontext.SaveChanges(); 
     if (Request.RequestUri.Query != "") 
     { 
      var u = dbcontext.BotUsers.Where(x => x.BotSalCode == Request.RequestUri.Query.Replace("?start=", string.Empty)).FirstOrDefault(); 
      u.AddedFriends++; 
      dbcontext.Entry(u).State = System.Data.Entity.EntityState.Modified; 
      if (u != null) 
      { 
       var connector = new ConnectorClient(new Uri(u.ServiceUrl)); 
       IMessageActivity newMessage = Activity.CreateMessageActivity(); 
       newMessage.Type = ActivityTypes.Message; 
       //newMessage.From = new ChannelAccount("<BotId>", "<BotName>"); 
       newMessage.From = new ChannelAccount("c3e7mhdafcecn7ng3", "Bot"); 
       newMessage.Conversation = new ConversationAccount(false, u.ConversationID); 
       newMessage.Recipient = new ChannelAccount(u.UserID); 
       if (u.AddedFriends <= 2) 
        newMessage.Text = $"SomeText."; 
       else newMessage.Text = "SomeTex"; 
       await connector.Conversations.SendToConversationAsync((Activity)newMessage); 
       dbcontext.SaveChanges(); 
      } 
     } 
    } 
} 
catch (Exception ex) 
{ 
} 

Alors, comment est-il possible de détecter frapper début dans le télégramme? Cordialement

+0

Pouvez-vous s'il vous plaît envoyer votre code tout à l'intérieur 'si (== message.Type ActivityTypes.ConversationUpdate)' – JasonSowers

+0

@JasonSowers J'ajouté le code dans 'if (message.Type == ActivityTypes.ConversationUpdate)' –

+0

Avez vous avez essayé la solution de contournement décrite ici: https://github.com/Microsoft/BotBuilder/issues/1832? –

Répondre

0

Ceci est la réponse que je trouve pour ma question après beaucoup d'essais: En classe MessagesController en public async Task<HttpResponseMessage> Post([FromBody]Activity activity) fonction définis par défaut dans une application BotFramework vous devez faire quelque chose comme ceci:

if (activity.Type == ActivityTypes.Message) 
{ 
    if (activity.Text.StartsWith("/start")) 
    { 
     //This will return you the start parameter of a link like : http://telegram.me/botname?start=Parameter 
     var Parameter = activity.Text.Replace("/start ", ""); 
    } 
} 

et si vous voulez envoyer un message de bienvenue afin que vous puissiez utiliser la façon dont @JasonSowers l'a dit et utiliser son code pour envoyer votre message. Cordialement

1

Je réalise que ce n'est pas une réponse complète, mais je voulais partager ce code avec vous au cas où cela pourrait aider. Vous trouverez ci-dessous la manière recommandée d'envoyer un message de bienvenue. Vous pourrez peut-être réutiliser ce code pour votre utilisation.

else if (message.Type == ActivityTypes.ConversationUpdate || message.Type == ActivityTypes.Message) 
      { 
       IConversationUpdateActivity iConversationUpdated = message as IConversationUpdateActivity; 
       if (iConversationUpdated != null) 
       { 
        ConnectorClient connector = new ConnectorClient(new System.Uri(message.ServiceUrl)); 

        foreach (var member in iConversationUpdated.MembersAdded ?? System.Array.Empty<ChannelAccount>()) 
        { 
         // if the bot is added, then 
         if (member.Id == iConversationUpdated.Recipient.Id) 
         { 
          var reply = ((Activity)iConversationUpdated).CreateReply(
          $"Hi! I'm Botty McBot."); 
          await connector.Conversations.ReplyToActivityAsync(reply); 
         } 
        } 
       } 
      } 
+0

Merci d'avoir partagé cela a fonctionné sur l'émulateur et le panneau de test du portail framework bot, mais n'a pas fonctionné dans Telegram: | –