2017-09-15 4 views
0

Je construis un ChatBot en C# et je veux qu'après quelques messages la conversation s'arrête, mais je ne sais pas comment le faire. J'ai déjà mis une limite de messages, et je veux que, après la portée de cette limite, plus de messages peuvent être envoyés. Il y a mon code:Mettre fin à une conversation C# bot

private int NombreDeMessages; 

protected override async Task MessageReceived(IDialogContext context, IAwaitable<IMessageActivity> item) 
{ 
    var message = await item; 
    NombreDeMessages += 1; 

    if (message.Text != null && NombreDeMessages < 3) 
    { 
     await base.MessageReceived(context, item); 
    } 
    else 
    { 
     var reply = context.MakeMessage(); 
     await context.PostAsync(reply); 
     context.Wait(this.MessageReceived); 
    }     
} 

J'ai supprimé la partie HeroCard car elle est inutile ici.

La chose que je veux est après le context.Wait à la fin, ajouter une fin de conversation afin que l'utilisateur ne peut pas parler plus au chatbot.

Répondre

1

Votre question est un peu ambiguë, Que voulez-vous dire par fin de la conversation voulez-vous que l'utilisateur ne puisse plus jamais parler au chatbot? Une chose que vous pouvez faire dans le bloc else que vous avez, vous pouvez appeler context.Done() et supprimer votre context.Wait(this.MessageReceived) qui permettrait à votre utilisateur d'envoyer des messages mais n'obtenez aucune réponse, ou dans le cas ci-dessous laisser l'utilisateur sachez que la conversation est terminée.

else 
{ 

    var reply = context.MakeMessage(); 
    reply.Text = "conversation ended"; 
    await context.PostAsync(reply); 
    context.Done(this); 
} 
0

Merci d'avoir résolu mon problème. Je poste le code si cela peut aider quelqu'un!

private int NombreDeMessages; 
     protected override async Task MessageReceived(IDialogContext context, IAwaitable<IMessageActivity> item) 
     { 
      var message = await item; 
      NombreDeMessages += 1; 
      string code = EndOfConversationCodes.CompletedSuccessfully; 
      CancellationToken cancellationToken = default(CancellationToken); 


      if (message.Text != null && NombreDeMessages < 3) 
      { 
       await base.MessageReceived(context, item); 

      } 
      else if (message.Text != null && NombreDeMessages == 3) 
      { 
       AdaptiveCard card = new AdaptiveCard(); 
       card.Body.Add(new TextBlock() 
       { 
        Text = "STOP FLOODING", 
        Weight = TextWeight.Bolder, 
        IsSubtle = true, 
        Wrap = true, 
        Size = TextSize.Large 
       }); 

       card.Body.Add(new TextBlock() 
       { 
        Text = "You have reach the limit of queries", 
        IsSubtle = false, 
        Wrap = true, 
        Size = TextSize.Normal 
       }); 

       card.Body.Add(new Image() 
       { 
        Url = "http://images.roadtrafficsigns.com/img/dp/lg/traffic-stop-sign.png", 

        HorizontalAlignment = HorizontalAlignment.Center, 
        Size = ImageSize.Stretch 
       }); 

       Attachment attachment = new Attachment() 
       { 
        ContentType = AdaptiveCard.ContentType, 
        Content = card 
       }; 
       var flood = context.MakeMessage(); 
       flood.Attachments.Add(attachment); 

       await context.PostAsync(flood); 

      } 
      else 
      { 

       var reply = context.MakeMessage(); 

       reply.Type = ActivityTypes.EndOfConversation; 
       reply.AsEndOfConversationActivity().Code = code; 

       await context.PostAsync(reply, cancellationToken); 

      } 

     }