Канал веб-чата BotFramework не может отображать карточку

У меня возникли трудности с созданием карты, использующей AdaptiveShowCardAction. Когда я пытаюсь создать простую карточку, она показывает себя.

Код:

public override AdaptiveCard CherwellCard(UserProfile userProfile)
{
    try
    {
        foreach (var service in CherwellCategories)
        {
            var serviceCard = new AdaptiveShowCardAction()
            {
                Title = service.Name,
                Card = new AdaptiveCard()
                {
                    Body = new List<AdaptiveElement>()
                {
                    new AdaptiveTextBlock()
                    {
                        Text = TranslateHelper.GetText(userProfile.Locale, "ticket_category"),
                        Weight = AdaptiveTextWeight.Bolder,
                        Size =  AdaptiveTextSize.Medium
                    }
                },
                    Actions = new List<AdaptiveAction>()
                    {

                    }
                }
            };
            foreach (var category in service.Categories)
            {
                var categoryCard = new AdaptiveShowCardAction()
                {
                    Title = category.Name,
                    Card = new AdaptiveCard()
                    {
                        Body = new List<AdaptiveElement>()
                    {
                        new AdaptiveTextBlock()
                        {
                            Text = TranslateHelper.GetText(userProfile.Locale, "ticket_sub_category"),
                            Weight = AdaptiveTextWeight.Bolder,
                            Size =  AdaptiveTextSize.Medium
                        }
                    },
                        Actions = new List<AdaptiveAction>()
                        {
                        }
                    }
                };
                foreach (var subCategory in category.Categories)
                {
                    var subCategoryCard = new AdaptiveShowCardAction()
                    {
                        Title = subCategory.Name,
                        Card = new AdaptiveCard()
                        {
                            Body = new List<AdaptiveElement>()
                        {
                            new AdaptiveTextBlock()
                            {
                                Text = TranslateHelper.GetText(userProfile.Locale, "ticket_selection"),
                                Weight = AdaptiveTextWeight.Bolder,
                                Size =  AdaptiveTextSize.Medium
                            }
                        },
                            Actions = new List<AdaptiveAction>()
                            {
                            }
                        }
                    };
                    var ContinueDataJson = "{ \"Service\" : \"{0}\", \"Category\" : \"{1}\", \"SubCategory\" : \"{2}\"}";
                    ContinueDataJson = ContinueDataJson.Replace("{0}", service.Name).Replace("{1}", category.Name).Replace("{2}", subCategory.Name);

                    var finalCard = new AdaptiveShowCardAction()
                    {
                        Title = TranslateHelper.GetText(userProfile.Locale, "ticket_details"),
                        Card = new AdaptiveCard()
                        {
                            Body = new List<AdaptiveElement>()
                        {
                            new AdaptiveTextBlock()
                            {
                                Text = TranslateHelper.GetText(userProfile.Locale, "ticket_services"),
                                Weight = AdaptiveTextWeight.Bolder,
                                Size =  AdaptiveTextSize.Medium
                            },
                            new AdaptiveTextBlock()
                            {
                                Text = service.Name,
                                Weight = AdaptiveTextWeight.Lighter,
                                Size =  AdaptiveTextSize.Medium
                            },
                            new AdaptiveTextBlock()
                            {
                                Text = TranslateHelper.GetText(userProfile.Locale, "ticket_category"),
                                Weight = AdaptiveTextWeight.Bolder,
                                Size =  AdaptiveTextSize.Medium
                            },
                            new AdaptiveTextBlock()
                            {
                                Text = category.Name,
                                Weight = AdaptiveTextWeight.Lighter,
                                Size =  AdaptiveTextSize.Medium
                            },
                            new AdaptiveTextBlock()
                            {
                                Text = TranslateHelper.GetText(userProfile.Locale, "ticket_sub_category"),
                                Weight = AdaptiveTextWeight.Bolder,
                                Size =  AdaptiveTextSize.Medium
                            },
                            new AdaptiveTextBlock()
                            {
                                Text = subCategory.Name,
                                Weight = AdaptiveTextWeight.Lighter,
                                Size =  AdaptiveTextSize.Medium
                            }
                        },
                            Actions = new List<AdaptiveAction>()
                        {
                            new AdaptiveSubmitAction()
                            {
                                Title =  TranslateHelper.GetText(userProfile.Locale, "ticket_submit"),
                                DataJson = ContinueDataJson
                            }
                        }
                        }
                    };

                    subCategoryCard.Card.Actions.Add(finalCard);

                    categoryCard.Card.Actions.Add(subCategoryCard);
                }
                serviceCard.Card.Actions.Add(categoryCard);
            }
            serviceAction.Add(serviceCard);
        }

        AdaptiveCard card = new AdaptiveCard()
        {
            Body = new List<AdaptiveElement>()
        {
            new AdaptiveTextBlock()
            {
                Text = TranslateHelper.GetText(userProfile.Locale, "ticket_services"),
                Weight = AdaptiveTextWeight.Bolder,
                Size =  AdaptiveTextSize.Medium
            }
        },
            Actions = new List<AdaptiveAction>()
            {
            }
        };
        card.Actions.AddRange(serviceAction);

        return card;
    }
    catch (Exception ex)
    {

        throw;
    }

}

Для списка CherwellCategories - он содержит 3 уровня, Сервис (8 данных) - Категория (20+) и Подкатегория (118 данных). Я подозреваю, что это потому, что карта слишком велика для ее обработки.

Карточка не отображается, когда я нажимаю на кнопку. Это не дает никакого ответа. Есть ли предел или что-то в этом роде? Поскольку я могу создать простую карточку и показать ее, продолжайте диалог.

JsonValue:

[
  {
    "name": "Acquire and Develop Talent",
    "categories": [
      {
        "name": "Manage Learning and Development",
        "categories": [
          {
            "name": "Deliver Training"
          },
          {
            "name": "Develop Learning Programmes"
          },
          {
            "name": "Evaluate Training"
          },
          {
            "name": "Manage course cancellation requests"
          },
          {
            "name": "Manage Employee pre-book requests"
          },
          {
            "name": "Register interest for a course"
          },
          {
            "name": "Set-up Learning"
          }
        ]
      },
      {
        "name": "Manage Performance",
        "categories": [
          {
            "name": "Conduct Annual Review"
          },
          {
            "name": "Conduct Mid-Year Review"
          },
          {
            "name": "Create Team Objectives & Individual Performance Plan"
          },
          {
            "name": "Design Performance and Development Processes and Tools"
          },
          {
            "name": "Manage and Assign Competencies"
          }
        ]
      },
      {
        "name": "Manage Recruitment and New Hires",
        "categories": [
          {
            "name": "Create Job Requisition"
          },
          {
            "name": "Develop Recruitment Processes and Tools"
          },
          {
            "name": "Document Employee Data"
          },
          {
            "name": "Edit / Cancel Job Requisition"
          },
          {
            "name": "Manage Job Offer - Grade 33 and below"
          },
          {
            "name": "Manage Job Offer - Grade 34 and above"
          },
          {
            "name": "Manage Offer Withdrawal"
          },
          {
            "name": "Manage Referral Process"
          },
          {
            "name": "Post Job / Position"
          },
          {
            "name": "Prepare for New Hire"
          },
          {
            "name": "Prepare Rejection"
          },
          {
            "name": "Screen Candidates"
          },
          {
            "name": "Select Candidate"
          },
          {
            "name": "Source Candidate"
          }
        ]
      },
      {
        "name": "Manage Talent",
        "categories": [
          {
            "name": "Conduct Talent Review & Identify Talent"
          },
          {
            "name": "Develop & Maintain Succession Plan"
          },
          {
            "name": "Develop Talent Processes & Tools"
          }
        ]
      }
    ]
  },
  {
    "name": "Ad-hoc Request",
    "categories": [
      {
        "name": "Admin request",
        "categories": [
          {
            "name": "Perform specified Admin action"
          }
        ]
      },
      {
        "name": "Reporting",
        "categories": [
          {
            "name": "Create Report"
          },
          {
            "name": "Run Report"
          }
        ]
      }
    ]
  },
  {
    "name": "HR Systems",
    "categories": [
      {
        "name": "Cherwell",
        "categories": [
          {
            "name": "Defect"
          },
          {
            "name": "New Requirement"
          },
          {
            "name": "Question"
          }
        ]
      },
      {
        "name": "IVR",
        "categories": [
          {
            "name": "Defect"
          },
          {
            "name": "New Requirement"
          },
          {
            "name": "Question"
          }
        ]
      },
      {
        "name": "Kenexa",
        "categories": [
          {
            "name": "Create new users"
          },
          {
            "name": "Jobs Specifications Updates"
          },
          {
            "name": "Manage assessments"
          },
          {
            "name": "Manage Reports"
          },
          {
            "name": "Requisitions Incidents"
          }
        ]
      },
      {
        "name": "Opentext",
        "categories": [
          {
            "name": "Defect"
          },
          {
            "name": "New Requirement"
          },
          {
            "name": "Question"
          }
        ]
      },
      {
        "name": "SharePoint",
        "categories": [
          {
            "name": "Access"
          },
          {
            "name": "Defect"
          }
        ]
      },
      {
        "name": "Success Factors",
        "categories": [
          {
            "name": "Defect"
          },
          {
            "name": "New Requirement"
          },
          {
            "name": "Question"
          }
        ]
      },
      {
        "name": "System integration",
        "categories": [
          {
            "name": "Defect"
          },
          {
            "name": "New Requirement"
          },
          {
            "name": "Question"
          }
        ]
      },
      {
        "name": "Talent Portal",
        "categories": [
          {
            "name": "Log in issues"
          },
          {
            "name": "Manage Reports"
          },
          {
            "name": "Manage Talent Xchange Communities"
          }
        ]
      }
    ]
  },
  {
    "name": "Manage Employee Administration",
    "categories": [
      {
        "name": "Manage Absence and Health",
        "categories": [
          {
            "name": "Administer Leave of Absence"
          },
          {
            "name": "Administer Occupational Health"
          },
          {
            "name": "Manage Return to Work"
          },
          {
            "name": "Record and Manage Long Term Sickness Absence"
          },
          {
            "name": "Record and Manage Short Term Sickness Absence"
          }
        ]
      },
      {
        "name": "Manage Employee Changes",
        "categories": [
          {
            "name": "Administer Mass Data Changes"
          },
          {
            "name": "Change Employee Personal Data"
          },
          {
            "name": "Change Employee Work Data"
          },
          {
            "name": "Manage Personnel Files"
          },
          {
            "name": "Manage Promotion, Demotion & Lateral Moves"
          }
        ]
      },
      {
        "name": "Manage Exit",
        "categories": [
          {
            "name": "Conduct Exit Interviews & Communications"
          },
          {
            "name": "Manage Involuntary Exit"
          },
          {
            "name": "Manage Redundancy"
          },
          {
            "name": "Manage Voluntary Exit"
          }
        ]
      },
      {
        "name": "Manage Global Mobility",
        "categories": [
          {
            "name": "End or Extend Assignment"
          },
          {
            "name": "Initiate Assignment"
          },
          {
            "name": "Initiate Assignment - What If"
          },
          {
            "name": "Initiate Assignment Non-Aurora"
          },
          {
            "name": "Manage APRO Data Errors"
          },
          {
            "name": "Manage APRO Testing"
          },
          {
            "name": "Manage APRO Updates and Uploads"
          },
          {
            "name": "Manage APRO User Accounts"
          },
          {
            "name": "Manage Cost of Living Review"
          },
          {
            "name": "Manage Home Leave Review"
          },
          {
            "name": "Manage Immigration"
          },
          {
            "name": "Manage Processes on Assignment"
          },
          {
            "name": "Manage Relocation"
          }
        ]
      },
      {
        "name": "Manage Organisation & Positions",
        "categories": [
          {
            "name": "Close / Freeze position"
          },
          {
            "name": "Create / Maintain Organisation Design & Authorities"
          },
          {
            "name": "Create Position"
          },
          {
            "name": "Modify Position"
          }
        ]
      },
      {
        "name": "Manage Payroll",
        "categories": [
          {
            "name": "Collect Payroll Data"
          },
          {
            "name": "Manage Exception / Escalation Payment Process"
          },
          {
            "name": "Manage Payroll Reporting"
          },
          {
            "name": "Manage Third Party Payroll"
          },
          {
            "name": "Payroll and Taxation Set Up and Ongoing Administration - International Assignment Payroll"
          },
          {
            "name": "Payroll and Taxation Set up and Ongoing Administration - Shadow"
          },
          {
            "name": "Payroll Processing"
          }
        ]
      }
    ]
  },
  {
    "name": "Manage Organisational Development",
    "categories": [
      {
        "name": "Manage Employee & Labour Relations",
        "categories": [
          {
            "name": "Manage Appeals"
          },
          {
            "name": "Manage Conduct Cases"
          },
          {
            "name": "Manage Grievances"
          },
          {
            "name": "Manage Unions / Work Councils"
          }
        ]
      },
      {
        "name": "Manage Organisational Strategy",
        "categories": [
          {
            "name": "Develop Engagement Surveys"
          },
          {
            "name": "Manage Diversity"
          }
        ]
      }
    ]
  },
  {
    "name": "Manage People Strategy & Analytics",
    "categories": [
      {
        "name": "Manage Analytics and Insight",
        "categories": [
          {
            "name": "Manage Reporting"
          }
        ]
      },
      {
        "name": "Plan & Manage HR and Manage Strategic HR",
        "categories": [
          {
            "name": "Manage Reporting"
          }
        ]
      }
    ]
  },
  {
    "name": "Manage Reward and Benefits",
    "categories": [
      {
        "name": "Manage Benefits",
        "categories": [
          {
            "name": "Manage Benefit Enrolment and Amendments"
          },
          {
            "name": "Manage Pensions Administration"
          },
          {
            "name": "Process Benefit Costs"
          }
        ]
      },
      {
        "name": "Manage Compensation, Incentives & Recognition",
        "categories": [
          {
            "name": "Analyse and Evaluate Jobs / Roles"
          },
          {
            "name": "Design Reward Plans"
          },
          {
            "name": "External Reward Benchmarking"
          },
          {
            "name": "Manage Bonus Payments"
          },
          {
            "name": "Manage Compensation Review"
          },
          {
            "name": "Manage Off-Cycle Reward Changes"
          },
          {
            "name": "Manage One-off payments & Allowances"
          },
          {
            "name": "Manage Reward Communications"
          },
          {
            "name": "Manage Share Plans"
          }
        ]
      }
    ]
  }
] 

Старые карты HeroCards использовали для обрезки определенного количества символов, которое варьировалось для каждого канала, и на самом деле нигде не было задокументировано - пределы можно было выяснить только экспериментально.

stuartd 06.09.2018 11:18

Я провожу тест на основе предоставленного вами фрагмента кода адаптивная карта хорошо отображается в веб-чате. Вы можете проверить, является ли активность, полученная в веб-чате, действительной адаптивной картой. Кроме того, если возможно, вы можете поделиться фактическими данными, хранящимися в переменной CherwellCategories, чтобы мы могли использовать их для воспроизведения проблемы.

Fei Han 07.09.2018 05:00

@FeiHan Ага. Я удаляю 3 из 7 сервисов (вместе с последующей категорией и подкатегорией, принадлежащими 3 удаленным сервисам), и это тоже работает. Если я удалю только 2, он больше не сможет отображаться.

Arif Sam 07.09.2018 06:39

@FeiHan Ive добавил значение json, чтобы вы могли его протестировать

Arif Sam 07.09.2018 06:51

Привет, @ArifSam, я могу воспроизвести ту же проблему на основе ваших данных. Не уверен, что активность / адаптивная карта превышают некоторые ограничения, потому что не нашли никакой документации по этому поводу. Кроме того, вы можете попробовать обходной путь, которым я поделился, чтобы использовать несколько адаптивных карт для достижения этого требования.

Fei Han 10.09.2018 09:57
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
243
1

Ответы 1

I remove 3 out of the 7 service (along with the subsequent category and subcategory belonging to the 3 service removed), and it works also. If i remove only 2, then it cannot render anymore.

Я провожу тест, используя те же данные, что и указанное вами значение json, я могу воспроизвести ту же проблему в веб-чате. И я проверил размер активности, которая содержит сгенерированную адаптивную карту в качестве вложения, это примерно 430кб.

Как вы упомянули, если я удалю некоторые элементы (услуги) из списка услуг, карта может отображаться и работать должным образом. Похоже, что некоторые ограничения активности или адаптивная карта вызывают эту проблему, в настоящее время мы не можем найти никакой документации, объясняющей подобную проблему, если возможно, вы можете создать проблему сообщить об этом.

Кроме того, вы показываете множество услуг, категорий и подкатегорий для выбора пользователем в одной адаптивной карточке, в качестве обходного пути вы можете попытаться разделить их на множество адаптивных карточек, а затем вы можете динамически отображать дочерние адаптивные карточки на основе выбора пользователя. и отправьте обратно значение, которое вы собрали в предыдущей адаптивной карточке.

Другие вопросы по теме