Обновление уже выложенной адаптивной карты в Bot Framework v4 в C # - PullRequest
2 голосов
/ 25 сентября 2019

Я работаю над ботом с Bot Framework v4 в C #.Теперь я хочу, чтобы после отправки пользователю Adaptive Card с помощью Actions я мог обновить эту карту после запуска Action.Например, эта кнопка исчезнет после щелчка.

Ссылка на решение NodeJS

здесь у меня есть решение в NodeJS, но я не могу передатьэто на C #.Кто-нибудь может помочь?

Подробнее о проекте: У меня есть Адаптивная карта, которая выглядит следующим образом: enter image description here

Эта карта будет сгенерирована после того, как я произведу поиск с помощьюMS Graph из библиотеки SharePoint.

Основная цель заключается в том, чтобы я мог использовать Refiners для обновления Карты новой картой из JSON.Кнопка «ОК» - это действие «Отправить», которое можно отследить в методе OnMessageActivityAsync.Входные значения находятся в значении действия, поэтому можно создать метод фильтра.Моя проблема в том, что я не могу обновить Карту, которая уже отправлена ​​Пользователю.

Прежде чем я отправил первую Карту с Результатами Пользователю, я записываю Операцию в состояние, чтобы я мог получить доступМетод OnMessageActivityAsync, но я не уверен, что это правильный подход.

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
        Logger.LogInformation("Running dialog with Message Activity.");

        var txt = turnContext.Activity.Text;
        dynamic val = turnContext.Activity.Value;
        // Check if the activity came from a submit action
        if (string.IsNullOrEmpty(txt) && val != null)
        {
            await turnContext.SendActivityAsync(MessageFactory.Text($"Refiner Language: {val.id_language}"));
            await turnContext.SendActivityAsync(MessageFactory.Text($"Refiner MachType: {val.id_type}"));

            var r = new StreamReader("Cards/helloCard2.json");
            string json = r.ReadToEnd();
            AdaptiveCard card = AdaptiveCard.FromJson(json).Card;

            var docSearchState = await StateAccessor.GetAsync(turnContext);
            Activity activity = docSearchState.Activity;
            activity.Attachments = new List<Attachment>() {
                new Attachment()
                {
                    Name = "Card",
                    ContentType = AdaptiveCard.ContentType,
                    Content = card,
                }
            };

            await turnContext.UpdateActivityAsync(activity);
        }

Этот код дает мне следующее сообщение об ошибке:

fail: Microsoft.Bot.Builder.Integration.AspNet.Core.BotFrameworkHttpAdapter[0]
  Exception caught : Error reading JArray from JsonReader. Current JsonReader item is not an array: StartObject. Path 'DocumentSearchState.Activity.attachments.$values[0].content.body'.

У кого-нибудь есть хорошая идея, чтобы решитьэто?

1 Ответ

0 голосов
/ 26 сентября 2019

Посмотрите этот ответ , чтобы получить представление о том, как обновить Adaptive Cards.

Вы можете либо написать код для динамического удаления действия отправки с Adaptive Card, либо выможет иметь две разные версии вашей карты: одну с действием отправки и одну без.

Если вы хотите, чтобы весь этот процесс был упрощен с помощью встроенного кода, который вы можете установить в пакеты NuGet, не стесняйтесь озвучивать вашиподдержка этих идей в GitHub:

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