在显示具有较大选择列表的自适应卡时(在 botframework 中)来自 bot 的大小限制(限制为 262144 字节)问题
Issue with size limit (limit of 262144 bytes) from bot while displaying adaptive card with large choice list (in botframework)
我的团队正在使用 Microsoft 机器人框架开发聊天机器人,作为一项要求,我们需要根据用户的内容显示动态选择列表 select。为此,我们正在点击 API 来获取自定义响应。请在下面找到响应示例。
{
"items": [
{
"val": {
"Field1": "Hello World"
},
"_links": {
"self": [
{
"href": "API_URL_FOR_THIS_OPTION"
}
]
}
},
{
"val": {
"Field1": "Hi World"
},
"_links": {
"self": [
{
"href": "API_URL_FOR_THIS_OPTION"
}
]
}
},
],
"_links": {
"self": [
{
"href": "MAIN_API_URL"
}
]
}
}
此处,要在动态选择列表中显示的选项数将等于项目数组的长度。以下代码用于将此响应转换为与自适应卡兼容的选择数组
var arr1=[]
for(var i=0; i<resp.body.items.length;i++)
{
arr1.push(resp.body.items[i].values["Field1"])
}
var choice_arr_new=[];
for(var j = 0; j<arr1.length; j++)
{
var dictionry={};
dictionry['title'] = arr[j];
dictionry['value'] = arr[j];
choice_arr_new.push(dictionry);
}
它运行良好,但 我遇到了大约 250 Kb 的大小限制,因为 api 响应有 items.length 更多在某些情况下超过 3000。因此,我收到以下 错误:请求内容长度超过 262144 字节的限制,同时尝试将选择数组传递给自适应卡
问题:-
- 有什么方法可以增加大小限制以容纳较大的 choices 数组
自适应卡?
- 是否有其他方法可以在 Bot Framework 中显示列表?
如果您仍想使用卡片,则必须将您的选择分成多组并将它们分配到不同的卡片上。
如果您使用的是简单的选项列表,那么您可能必须同时显示多张卡片,为此使用轮播是个好主意。您可以使用多个活动来显示多个轮播。如果你有兴趣拥有一个可以在点击其中一个卡片时为你禁用多个活动的库,你可能想表达你对我即将推出的卡片库的支持:https://github.com/BotBuilderCommunity/botbuilder-community-dotnet/issues/137
如果您可以对您的选择进行分类,甚至可能只是通过标题的第一个字母,那么您可能希望首先让用户 select 一个类别,然后 select 来自的实际选择该类别中较小的一组。
如果您想将每个选项显示为一个按钮,您可以只使用常规的 Bot Framework 卡片而不是自适应卡片。如果您曾经尝试过网络聊天示例,那么您可能已经注意到 MockBot 将其菜单显示为一长串带有按钮的卡片。您也可以使用建议的操作,但一次显示那么多建议的操作通常不是一个好主意。
最后,您可以将所有选择显示为编号列表,以便用户可以将他们的选择作为文本输入。
我的团队正在使用 Microsoft 机器人框架开发聊天机器人,作为一项要求,我们需要根据用户的内容显示动态选择列表 select。为此,我们正在点击 API 来获取自定义响应。请在下面找到响应示例。
{
"items": [
{
"val": {
"Field1": "Hello World"
},
"_links": {
"self": [
{
"href": "API_URL_FOR_THIS_OPTION"
}
]
}
},
{
"val": {
"Field1": "Hi World"
},
"_links": {
"self": [
{
"href": "API_URL_FOR_THIS_OPTION"
}
]
}
},
],
"_links": {
"self": [
{
"href": "MAIN_API_URL"
}
]
}
}
此处,要在动态选择列表中显示的选项数将等于项目数组的长度。以下代码用于将此响应转换为与自适应卡兼容的选择数组
var arr1=[]
for(var i=0; i<resp.body.items.length;i++)
{
arr1.push(resp.body.items[i].values["Field1"])
}
var choice_arr_new=[];
for(var j = 0; j<arr1.length; j++)
{
var dictionry={};
dictionry['title'] = arr[j];
dictionry['value'] = arr[j];
choice_arr_new.push(dictionry);
}
它运行良好,但 我遇到了大约 250 Kb 的大小限制,因为 api 响应有 items.length 更多在某些情况下超过 3000。因此,我收到以下 错误:请求内容长度超过 262144 字节的限制,同时尝试将选择数组传递给自适应卡
问题:-
- 有什么方法可以增加大小限制以容纳较大的 choices 数组 自适应卡?
- 是否有其他方法可以在 Bot Framework 中显示列表?
如果您仍想使用卡片,则必须将您的选择分成多组并将它们分配到不同的卡片上。
如果您使用的是简单的选项列表,那么您可能必须同时显示多张卡片,为此使用轮播是个好主意。您可以使用多个活动来显示多个轮播。如果你有兴趣拥有一个可以在点击其中一个卡片时为你禁用多个活动的库,你可能想表达你对我即将推出的卡片库的支持:https://github.com/BotBuilderCommunity/botbuilder-community-dotnet/issues/137
如果您可以对您的选择进行分类,甚至可能只是通过标题的第一个字母,那么您可能希望首先让用户 select 一个类别,然后 select 来自的实际选择该类别中较小的一组。
如果您想将每个选项显示为一个按钮,您可以只使用常规的 Bot Framework 卡片而不是自适应卡片。如果您曾经尝试过网络聊天示例,那么您可能已经注意到 MockBot 将其菜单显示为一长串带有按钮的卡片。您也可以使用建议的操作,但一次显示那么多建议的操作通常不是一个好主意。
最后,您可以将所有选择显示为编号列表,以便用户可以将他们的选择作为文本输入。