Botframework 带有MS团队的动态自适应卡

Botframework 带有MS团队的动态自适应卡,botframework,microsoft-teams,adaptive-cards,Botframework,Microsoft Teams,Adaptive Cards,我们正在为基于MS团队的机器人动态渲染自适应卡。我们面临的问题是,当在WebChat或Emulator上时,该卡呈现良好,但从MS团队调用时会捕获异常 我们使用了自适应卡的文档以及设计器,但似乎都不起作用。我们现在很好奇渲染MS团队是否需要一些特殊的修复来工作。根据在线提供的文档,我们尝试使用“MSTeam”作为id 自适应卡代码 cardRequest.Body.Add(new AdaptiveContainer() { Items = new List

我们正在为基于MS团队的机器人动态渲染自适应卡。我们面临的问题是,当在WebChat或Emulator上时,该卡呈现良好,但从MS团队调用时会捕获异常

我们使用了自适应卡的文档以及设计器,但似乎都不起作用。我们现在很好奇渲染MS团队是否需要一些特殊的修复来工作。根据在线提供的文档,我们尝试使用“MSTeam”作为id

自适应卡代码

cardRequest.Body.Add(new AdaptiveContainer()
        {
            Items = new List<AdaptiveElement>
            {
            new AdaptiveTextBlock()
            {
                 Text = CatalogSubject,
                 Size = AdaptiveTextSize.Default,
                 Weight = AdaptiveTextWeight.Bolder,
            },
            new AdaptiveColumnSet()
            {
                Columns = new List<AdaptiveColumn>()
                {
                    new AdaptiveColumn()
                    {
                        Items = new List<AdaptiveElement>()
                        {
                            new AdaptiveImage()
                            {
                               Style = AdaptiveImageStyle.Default,
                                 Url =new Uri("https://pleudepooopsdemo02.service-now.com/c4b933e9471211002ee987e8dee49064.iix"),

                                Separator=true,
                                Size =  AdaptiveImageSize.Large,
                            }
                        },
                       Separator =true,
                        Width="auto",
                    },
                    new AdaptiveColumn()
                    {
                        Items = new List<AdaptiveElement>()
                        {
                            new AdaptiveTextBlock()
                            {
                                Text=  subCatdescription,
                                Weight= AdaptiveTextWeight.Default,
                                Separator=true,
                                Size = AdaptiveTextSize.Small,
                                Wrap =true,

                            }

                        },
                        Separator =true,
                        Width="stretch",
                    },

                }

            },
            new AdaptiveFactSet()
            {
               Facts = new List<AdaptiveFact>()
               {
                new AdaptiveFact{Title =  "Price",Value =catalogType.scSubCategoryPrice},
                new AdaptiveFact{Title =  "Quantity",Value ="1"},
                new AdaptiveFact{Title = "Email",Value= serviceNowHelper.ParseEmailId(sc.Context.Activity.From.Id, sc.Context.Activity.Conversation.Id, sc.Context.Activity.ServiceUrl, sc.Context.Activity.ChannelId) },
                new AdaptiveFact{Title = "sysid",Value=catalogType1.scSubcategorySysid},
                new AdaptiveFact{Title="PassingValue",Value=catalogType.scSubCategoryName.Substring(catalogType.scSubCategoryName.IndexOf('.') + 1)}

               }
            },

            }


        });
        var button = new CardAction()
        {
            Type = "Action.Submit",
            Title="Create Request",
            DisplayText="I clicked this button",
            Value="{\"Create\": \"" + catalogType.scSubCategoryName.Substring(catalogType.scSubCategoryName.IndexOf('.') + 1) + "\"}"


        };

        AdaptiveAction actions =
                new AdaptiveSubmitAction()
                {
                    Title = "Create Request",
                    Type = "Action.Submit",                      
                    Data = "{\"Create\": \"" + catalogType.scSubCategoryName.Substring(catalogType.scSubCategoryName.IndexOf('.') + 1) + "\"}",



            Id = "create",

                };

        AdaptiveAction actions1 =
               new AdaptiveSubmitAction()
               {
                   Title = "Cancel Request",
                   Type = "Action.Submit",                      
                   Data = "Cancel",
                   Id = "cancel"

               };



        cardRequest.Actions.Add(actions);
        cardRequest.Actions.Add(actions1);

        Object displayCardJson = JsonConvert.DeserializeObject(cardRequest.ToJson());

        List<Attachment> attachmentsList = new List<Attachment>();


        Attachment att = new Attachment()
        {
            Content = displayCardJson,
            ContentType = AdaptiveCard.ContentType

        };

        reply.Attachments.Add(att);                  
        return reply;
cardRequest.Body.Add(新的AdaptiveContainer()
{
项目=新列表
{
新的AdaptiveTextBlock()
{
Text=目录主题,
大小=AdaptiveTextSize.Default,
权重=自适应文本权重。更粗体,
},
新的AdaptiveColumnSet()
{
列=新列表()
{
新的AdaptiveColumn()
{
Items=新列表()
{
新的AdaptiveImage()
{
Style=AdaptiveImageStyle.Default,
Url=新Uri(“https://pleudepooopsdemo02.service-now.com/c4b933e9471211002ee987e8dee49064.iix"),
分隔符=真,
大小=图像大小。大,
}
},
分隔符=真,
Width=“自动”,
},
新的AdaptiveColumn()
{
Items=新列表()
{
新的AdaptiveTextBlock()
{
Text=子描述,
权重=AdaptiveTextWeight.Default,
分隔符=真,
大小=自适应文本大小。小,
Wrap=true,
}
},
分隔符=真,
Width=“拉伸”,
},
}
},
新的AdaptiveFactSet()
{
事实=新列表()
{
新的自适应事实{Title=“Price”,Value=catalogType.scSubcataloyPrice},
新的自适应事实{Title=“Quantity”,Value=“1”},
新的自适应事实{Title=“Email”,Value=serviceNowHelper.ParseEmailId(sc.Context.Activity.From.Id,sc.Context.Activity.Conversation.Id,sc.Context.Activity.ServiceUrl,sc.Context.Activity.ChannelId)},
新的自适应事实{Title=“sysid”,Value=catalogType1.scsubcategory sysid},
新的自适应事实{Title=“PassingValue”,Value=catalogType.scSubCategoryName.Substring(catalogType.scSubCategoryName.IndexOf('.')+1)}
}
},
}
});
var按钮=新的CardAction()
{
Type=“Action.Submit”,
Title=“创建请求”,
DisplayText=“我单击了此按钮”,
Value=“{\“Create\”:\”+catalogType.scSubCategoryName.Substring(catalogType.scSubCategoryName.IndexOf('.')+1)+“\”}
};
自适应动作=
新的AdaptiveSubmitation()
{
Title=“创建请求”,
Type=“Action.Submit”,
Data=“{\“Create\”:\”+catalogType.scSubCategoryName.Substring(catalogType.scSubCategoryName.IndexOf('.')+1)+“\”},
Id=“创建”,
};
自适应操作1=
新的AdaptiveSubmitation()
{
Title=“取消请求”,
Type=“Action.Submit”,
Data=“取消”,
Id=“取消”
};
cardRequest.Actions.Add(操作);
cardRequest.Actions.Add(actions1);
Object displayCardJson=JsonConvert.DeserializeObject(cardRequest.ToJson());
列表附件列表=新列表();
附件att=新附件()
{
Content=displayCardJson,
ContentType=AdaptiveCard.ContentType
};
答复.附件.添加(附件);
回复;
COSMOSDB中的错误消息

        {
"User": {
    "id": "29:1j50LiW4dYQyZQ6T44RruVxuaBfatlBHX0YuD7Hly8pNNAiQuWgcoD5jRGHLphLgokeJ6N6b7O7GODLy2QU3G_A",
    "name": "Mary OfEngland",
    "aadObjectId": "98a69ea5-8d65-4264-9d5c-2f12171258a2",
    "role": "user"
},
"Exception": "Cannot perform runtime binding on a null reference",
"StackTrace": "   at CallSite.Target(Closure , CallSite , Object )\r\n   at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)\r\n   at FepdePleu.PA.Chatbot.PoC.Dialogs.TicketOpen.GenericRequest.GenericRequestDialog.<>c__DisplayClass40_0.<CreateRequestTicket>b__0(scCatalogCategoryListDetails a) in C:\\Mary\\BotProject\\FepdePleuBOT\\FepdePleu.PA.Chatbot.PoC\\FepdePleu.PA.Chatbot.PoC\\Dialogs\\TicketOpen\\GenericRequest\\GenericRequestDialog.cs:line 355\r\n   at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()\r\n   at System.Linq.Enumerable.DistinctIterator`1.MoveNext()\r\n   at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)\r\n   at FepdePleu.PA.Chatbot.PoC.Dialogs.TicketOpen.GenericRequest.GenericRequestDialog.CreateRequestTicket(WaterfallStepContext sc, CancellationToken cancellationToken) in C:\\Mary\\BotProject\\FepdePleuBOT\\FepdePleu.PA.Chatbot.PoC\\FepdePleu.PA.Chatbot.PoC\\Dialogs\\TicketOpen\\GenericRequest\\GenericRequestDialog.cs:line 355\r\n   at Microsoft.Bot.Builder.Dialogs.WaterfallDialog.OnStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)\r\n   at Microsoft.Bot.Builder.Dialogs.WaterfallDialog.RunStepAsync(DialogContext dc, Int32 index, DialogReason reason, Object result, CancellationToken cancellationToken)\r\n   at Microsoft.Bot.Builder.Dialogs.WaterfallDialog.ResumeDialogAsync(DialogContext dc, DialogReason reason, Object result, CancellationToken cancellationToken)\r\n   at Microsoft.Bot.Builder.Dialogs.DialogContext.EndDialogAsync(Object result, CancellationToken cancellationToken)\r\n   at Microsoft.Bot.Builder.Dialogs.Prompt`1.ContinueDialogAsync(DialogContext dc, CancellationToken cancellationToken)\r\n   at Microsoft.Bot.Builder.Dialogs.DialogContext.ContinueDialogAsync(CancellationToken cancellationToken)\r\n   at FepdePleu.PA.Chatbot.PoC.InterruptableDialog.OnContinueDialogAsync(DialogContext dc, CancellationToken cancellationToken) in C:\\Mary\\BotProject\\FepdePleuBOT\\FepdePleu.PA.Chatbot.PoC\\FepdePleu.PA.Chatbot.PoC\\Dialogs\\Shared\\InterruptableDialog.cs:line 39\r\n   at Microsoft.Bot.Builder.Dialogs.ComponentDialog.ContinueDialogAsync(DialogContext outerDc, CancellationToken cancellationToken)\r\n   at Microsoft.Bot.Builder.Dialogs.DialogContext.ContinueDialogAsync(CancellationToken cancellationToken)\r\n   at FepdePleu.PA.Chatbot.PoC.RouterDialog.OnContinueDialogAsync(DialogContext innerDc, CancellationToken cancellationToken) in C:\\Mary\\BotProject\\FepdePleuBOT\\FepdePleu.PA.Chatbot.PoC\\FepdePleu.PA.Chatbot.PoC\\Dialogs\\Shared\\RouterDialog.cs:line 29\r\n   at Microsoft.Bot.Builder.Dialogs.ComponentDialog.ContinueDialogAsync(DialogContext outerDc, CancellationToken cancellationToken)\r\n   at Microsoft.Bot.Builder.Dialogs.DialogContext.ContinueDialogAsync(CancellationToken cancellationToken)\r\n   at FepdePleu.PA.Chatbot.PoC.ChatbotPoC.OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken) in C:\\Mary\\BotProject\\FepdePleuBOT\\FepdePleu.PA.Chatbot.PoC\\FepdePleu.PA.Chatbot.PoC\\ChatbotPoC.cs:line 95\r\n   at Microsoft.Bot.Builder.AutoSaveStateMiddleware.OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken)\r\n   at Microsoft.Bot.Builder.TranscriptLoggerMiddleware.OnTurnAsync(ITurnContext turnContext, NextDelegate nextTurn, CancellationToken cancellationToken)\r\n   at Microsoft.Bot.Builder.MiddlewareSet.ReceiveActivityWithStatusAsync(ITurnContext turnContext, BotCallbackHandler callback, CancellationToken cancellationToken)\r\n   at Microsoft.Bot.Builder.BotAdapter.RunPipelineAsync(ITurnContext turnContext, BotCallbackHandler callback, CancellationToken cancellationToken)",
"date": "2019-10-21T11:03:56.4735109+00:00",
"id": "360c5e3a-98ee-47a6-96c7-c2d135cc6dcd",
"_rid": "V8ZNAMmmWUa-BgAAAAAAAA==",
"_self": "dbs/V8ZNAA==/colls/V8ZNAMmmWUY=/docs/V8ZNAMmmWUa-BgAAAAAAAA==/",
"_etag": "\"05006368-0000-0300-0000-5dad909c0000\"",
"_attachments": "attachments/",
"_ts": 1571655836
{
“用户”:{
“id”:“29:1J50LIW4DYZQ6T44RRUVXUABFATLBHX0YUD7HLY8PNNAIQUGCOD5JRGHLPGOKJ6N6B7O7GOD7Q2Q0YU7YU7YU7YU8PNNAIQUKCOD5JRGHLGOKJ6N6B7N6B7O7O7GOD7Q2Q0Y,
“姓名”:“英格兰玛丽”,
“AAD目标”:“98a69ea5-8d65-4264-9d5c-2f12171258a2”,
“角色”:“用户”
},
“异常”:“无法对空引用执行运行时绑定”,
“StackTrace”:“at CallSite.Target(Closure,CallSite,Object)\r\n at System.Dynamic.updateedelegates.UpdateAndExecute1[T0,TRet](CallSite,T0 arg0)\r\n at FepdePleu.PA.Chatbot.PoC.Dialogs.TicketOpen.generirequest.generirequestdialog.c\u显示类别40\u 0.b\u 0(SCCatalogCategoryListA)在C:\\Mary\\BotProject\\FepdePleuBOT\\FepdePleu.PA.Chatbot.PoC\\FepdePleu.PA.Chatbot.PoC\\Dialogs\\ticketpen\\generirequest\\generirequestdialog.cs:System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()\r\n在System.Linq.Enumerable.distributor`1.MoveNext()\r\n在System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)\r\n在FepdePleu.PA.Chatbot.PoC.Dialogs.ticketpen.generirequest.generirequestdialog.CreateRequestTicket(WaterWallStepContext sc,CancellationToken CancellationToken)在C:\\Mary\\BotProject\\FepdePleuBOT\\FepdePleu.PA.Chatbot.PoC\\FepdePleu.PA.Chatbot.PoC\\Dialogs\\ticketpen\\generirequest\\generirequestdialog.cs:Microsoft.Bot.Builder.Dialogs.waterwalldialog.OnStepAsy的第355行\r\n
Attachment attachment = new Attachment() {  ContentType = AdaptiveCard.ContentType,     Content = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(card)), };