2017-03-23 10 views
1

フォームを開始しているダイアログがあり、ユーザーがフォームを完成した後にヒーローカードを表示したいと思います。私は以下のコードでフォームを開始していますし、フォームの後のメソッドも割り当てています。ボットフレームワークのヒストリカルフォームのヒーローカードで返信するC#

var startFormDialog = Chain.From(() => FormDialog.FromForm(StartForm.BuildForm, FormOptions.PromptInStart));  
context.Call<StartForm>(startFormDialog,AfterMenuForm); 

//AfterMenuForm method implementation 
private async Task AfterMenuForm(IDialogContext context, IAwaitable<StartForm> result) 
{ 
    message = (Activity)context.MakeMessage(); 
    Activity replyToConversation = message.CreateReply("Should go to conversation, with a hero card"); 
    replyToConversation.Recipient = message.From; 
    replyToConversation.Type = "message"; 
    replyToConversation.Attachments = new List<Attachment>(); 
    //List<CardImage> cardImages = new List<CardImage>(); 
    replyToConversation.AttachmentLayout = "carousel"; 
    List<CardAction> cardButtons = new List<CardAction>(); 
    CardAction plButton = new CardAction() 
    { 
     Value = "https://en.wikipedia.org/wiki/Pig_Latin", 
     Type = "openUrl", 
     Title = "WikiPedia Page" 
    }; 
    cardButtons.Add(plButton); 
    HeroCard plCard = new HeroCard() 
    { 
     Title = "I'm a hero card", 
     Subtitle = "Pig Latin Wikipedia Page", 
     //Images = cardImages, 
        Buttons = cardButtons 
     }; 
     Attachment plAttachment = plCard.ToAttachment(); 
     replyToConversation.Attachments.Add(plAttachment); 
     await context.PostAsync(replyToConversation); 
} 

問題は、私は活動オブジェクトを必要とする、ためにユーザにヒーローカードの解答を送信できるようにすること、であり、これはAfterMenuForm方法では使用できません。このメソッド内でアクティビティオブジェクトをサーフェスする方法はありますか?

答えて

3

IDialogContextを使用して、新しいIMessageActivityを作成し、HeroCardを送信することができます。

try context.MakeMessage();メッセージを受け取ったら、それを使ってカードを送るだけです。そのメッセージに対してCreateReplyを実行する必要はありませんが、必要ではありません。

また、シナリオに応じて、元のアクティビティに何をアクセスするかもしれません。それはcontext.Activityにあります。

最後に、なぜあなたがChain.Fromを使用しているのかわかりません。あなただけ使用する必要があります。PostAsyncにHeroCardをしようとしたとき

var startFormDialog = FormDialog.FromForm(StartForm.BuildForm, FormOptions.PromptInStart));  
context.Call<StartForm>(startFormDialog,AfterMenuForm); 
+0

こんにちは@EzequielJadib、私はすでにMakeMessage()メソッドを試してみました、しかし、私は{「『のActivityIDは』 nullにすることはできません。」}:この例外を得ました。コールバックAfterMenuFormメソッドが呼び出されたときに、アクティビティがコンテキスト内に存在しないようです。さらに、context.ActivityプロパティはIDialogContext内に存在しません。これを解決する他の方法はありますか? AfterMenuFormメソッドの実装をオリジナルの投稿に追加しました。またChain.Formのアドバイスにも感謝します。 –

+1

あなたはどのバージョンのBotBuilderナゲットを使用していますか?あなたはCreateReplyを行う必要はありません。 MakeMessageで作成したメッセージを使用してください。受取人に記入する必要はありません –

+0

Ezequielありがとうございます。私はv 3.0を使用しています。 CreateReplyを使わずにMakeMessageから取得したメッセージを使用したときに機能しました。このコメントをあなたの答えに加えてください。私はそれを正しいものとしてマークします。 –

関連する問題