Botframework 带有MS团队的动态自适应卡
我们正在为基于MS团队的机器人动态渲染自适应卡。我们面临的问题是,当在WebChat或Emulator上时,该卡呈现良好,但从MS团队调用时会捕获异常 我们使用了自适应卡的文档以及设计器,但似乎都不起作用。我们现在很好奇渲染MS团队是否需要一些特殊的修复来工作。根据在线提供的文档,我们尝试使用“MSTeam”作为id 自适应卡代码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
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)), };