2017-03-23 25 views
1

我有我從開始形式的對話框,我想在用戶完成表單後顯示英雄卡。我從下面的代碼開始表格,並指定了後面的表格方法。回覆英雄卡在形式方法在Bot框架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

嘗試context.MakeMessage();。一旦你有消息,你可以用它來發送卡。您不需要對該消息執行CreateReply,這不是必需的。

此外,根據情景,您可能會訪問原始活動。這在context.Activity上可用。

最後,我不知道你爲什麼使用Chain.From;你應該只使用:

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

嗨@EzequielJadib,我試過MakeMessage()方法已經,但是試圖PostAsync的HeroCard:當我得到這個異常{「‘activityId’不能爲空。」}。顯然,當調用AfterMenuForm方法時,上下文中不存在活動。而且,context.Activity屬性在IDialogContext中不存在。請問是否有其他解決方法?我已經將AfterMenuForm方法實現添加到原始文章。並感謝Chain.Form的建議。 –

+1

您正在使用什麼版本的BotBuilder nuget?您不需要執行CreateReply。只需使用MakeMessage創建的消息即可。喲不需要填寫收件人 –

+0

謝謝Ezequiel。我正在使用v 3.0。當我使用從MakeMessage獲得的消息而沒有CreateReply時,它工作正常。請將此評論添加到您的回答中,我會將其標記爲正確。 –