2017-09-08 14 views
1

サムネイルカードボタンを正しく使用するにはどうすればいいですか?私は特にボタンがcontext.Wait(methodName)で新しいメソッドを呼び出すようにします。 は今、私は、サムネイルカードボタン用のコードがあります。Thumbnail Card context.Wait()

thumbnailCard.Buttons = new[] {new CardAction(
         ActionTypes.MessageBack, $"Account", value: id 
         )}; 
var msg = context.MakeMessage(); 
msg.AttachmentLayout = AttachmentLayoutTypes.Carousel; 
msg.Attachments = cardAttachment.ToList(); 

await context.PostAsync(msg); 
context.Wait(methodName); **I want this to be called when button was clicked** 

をしかし、どうやら、私はボタンをクリックしたときにメソッドを起動することはできません。 PS:私は実際にはボットのフレームワークに新しいので、どんな助けにも感謝します。ありがとう。

注:可能な重複は、私が持っている問題ではありません。私はthumbnail.Buttons経由でメソッドを呼び出すのではなく、むしろcontext.Wait(MethodName)を使って別のメソッドに渡す必要がある値を挿入していますが、それを正しく実装する方法は同じですが、私は文脈に挿入した方法を呼び出すことができませんでした。

+0

MessageReceivedメソッドで、(CardActionで渡すものと一致する)値をチェックして、呼び出したいメソッドを配置する必要があります。 –

+0

[特定のコールバックを呼び出す方法カードアクション - Botフレームワークをクリックしてください(https://stackoverflow.com/questions/40808192/how-to-call-a-specifc-callback-when-clicking-in-card-action-bot-framework) –

+0

@NicolasR私はこれを試したが、それは私の最後に働いていない。 –

答えて

0

お返事ありがとうございます。私はActionTypes.PostBackを使用して問題を解決し、MessageBackImBackも使用しませんでした。

はい、私はまだContext.Wait(method)を利用しました。

0

あなたは実際にcontext.Waitを使用する必要がありますか、それはあなたが試しているものですか?あなたはそれを使うことができますが、ボタンがクリックされた後にメッセージを待つつもりです。そういうわけではありません。返答してください、私はあなたが実際にそれを必要とするように私の答えを調整することができます。

これは、ボタンをクリックした後にメソッドを実行したいと思うようです。そのためには、次のコードを使用して必要に応じて調整することができます。これは私が考えることができる最も単純な実装です。あなたにフォローアップの質問がある場合、または何か他のものが必要な場合はお知らせください:

private async Task MessageReceivedAsync(IDialogContext context, 
    IAwaitable<object> result) 
    { 
     var activity = await result as Activity; 
     var response = activity.CreateReply(); 

     IMessageActivity reply = context.MakeMessage(); 


     if (activity.Text.ToLowerInvariant() == "do stuff") 
     { 

      activity.CreateReply("I have done the stuff"); 
      await context.PostAsync(activity); 
     } 
     else 
     { 
      List<CardAction> cardButtons = new List<CardAction>(); 

      CardAction Button = new CardAction 
      { 
       Title = "do stuff", 
       //Type = ActionTypes.ImBack; //this will display "do stuff" in the chat window 
       Type = ActionTypes.PostBack, //same behavior except "do stuff" not displayed 
       Value = "do stuff" 
      }; 

      cardButtons.Add(Button); 

      HeroCard Card = new HeroCard() 
      { 
       Buttons = cardButtons 
      }; 
      Attachment plAttachment = Card.ToAttachment(); 

      reply.Attachments.Add(plAttachment); 

      await context.PostAsync(reply); 
     } 

     context.Wait(MessageReceivedAsync); 
    } 
+0

申し訳ありませんが、私の遅い応答です。私はポストバックを使ってこれを修正し、messagereceivedasyncメソッドを使用してリッチカードが渡された値をチェックしません。ありがとう。 –

+0

うれしい – JasonSowers