2017-09-15 1 views
0

私はC#でチャットボットを作成していますが、メッセージの後に会話を止めてもらいたいのですが、どうやってやるのか分かりません。私はすでにメッセージの限界を設定しており、この限界に達するとメッセージを送信することはできません。コードがあります:会話を終了するC#ボット

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

ここでは役に立たないので、私はHeroCardの部分を削除しました。

私がしたいことは最後にcontext.Waitの後にあります。ユーザーがチャットボットにもっと話すことができないように、会話の最後を追加してください。

答えて

1

あなたの質問は少し曖昧です。エンドカンバセーションあなたはチャットボットと再び会話できないようにしますか? elseブロックでできることの1つは、context.Done()に電話してcontext.Wait(this.MessageReceived)を削除して、ユーザーにメッセージを送信しても応答は得られないか、以下の場合は会話が終了したことをユーザーに知らせます。

else 
{ 

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

ありがとうございます私の問題を解決しました。誰かを助けることができるなら私はコードを投稿する!

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

      } 

     } 
関連する問題