Как обнаружить / прослушать action.submit с адаптивной карты

Я использую botframework (шаблон корпоративного бота) и LUIS.ai:

Моя проблема в том, что когда я заполняю настраиваемую адаптивную карточку (у нее три поля для ввода текста) и нажимаю «Отправить», я получаю следующее сообщение: «Извините, я не могу с этим помочь». Я вижу в эмуляторе, что кнопка отправки отправляет обратно введенные значения, но я не уверен, как я прислушиваюсь к действию кнопки. Я думаю, что мне нужно слушать, когда вызывается идентификатор действия, но я Я не совсем уверен, как это сделать.

Ниже приведен код, вызывающий диалог:

    public static IMessageActivity SendTicketFormCard(ITurnContext turnContext, dynamic data)
    {
        var response = turnContext.Activity.CreateReply();
        var introcard = File.ReadAllText(@".\dialogs\main\resources\Ticket_Fields.json");

        response.Attachments = new List<Attachment>();
        response.Attachments.Add(new Attachment()
        {
            ContentType = "application/vnd.microsoft.card.adaptive",
            Content = JsonConvert.DeserializeObject(introcard),
        });

        return response;
    }

Где диалог JSON выглядит так:

{
  "type": "AdaptiveCard",
  "body": [
    {
      "type": "TextBlock",
      "horizontalAlignment": "Center",
      "size": "Medium",
      "weight": "Bolder",
      "color": "Dark",
      "text": "Search Ticket"
    },
    {
      "type": "TextBlock",
      "id": "94358428-5ef2-43a5-9056-d3cac1abfabd",
      "text": "Ticket ID:",
      "maxLines": 1
    },
    {
      "type": "Input.Text",
      "id": "68e1e180-4cdc-4ad6-bb8f-743554f1f58b",
      "placeholder": "Ticket ID (required)",
      "maxLength": 10
    },
    {
      "type": "TextBlock",
      "id": "2da1df9d-7f61-4e5c-9ff9-7aba2c5b306b",
      "text": "Summary:",
      "maxLines": 1
    },
    {
      "type": "Input.Text",
      "id": "403979a3-ccba-4baa-a885-2abca754cc69",
      "placeholder": "Summary (optional)",
      "maxLength": 250,
      "isMultiline": true
    },
    {
      "type": "TextBlock",
      "id": "a25464c7-07ea-4270-995f-5e57b783b52d",
      "text": "Status:",
      "maxLines": 1
    },
    {
      "type": "Input.Text",
      "id": "7794d725-feb5-4516-9786-d18684892106",
      "placeholder": "Status (optional)",
      "maxLength": 30
    }
  ],
  "actions": [
    {
      "type": "Action.Submit",
      "id": "783fe2e4-4056-449e-8cc6-5dc9c406222a",
      "title": "Search"
    }
  ],
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.0"
}

Я не уверен в решении. Все, что я могу сделать, это сослаться на статью это

Jayendran 18.11.2018 05:21

Размещение карты отличается от вызова диалога. Карты - это не диалоги. docs.microsoft.com/en-us/azure/bot-service/…

Kyle Delaney 20.11.2018 23:58

@Colby - Тебе все еще нужна помощь?

Kyle Delaney 27.11.2018 19:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
2 112
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сообщение "Извините, я не могу с этим помочь". является ответом на намерение LUIS "None" в классе MainDialog корпоративного шаблона. Вы можете найти сообщение в MainStrings.resx.

Действие отправки адаптивной карты отправляет боту сообщение без текста, а затем LUIS пытается интерпретировать намерение этого сообщения, используя текст сообщения, но текста нет. Отправленные данные будут содержаться в свойстве Value действия. Чтобы прочитать данные из свойства Value, вам необходимо использовать идентификаторы полей ввода карты в качестве ключей.

private const string TICKETFIELD = "68e1e180-4cdc-4ad6-bb8f-743554f1f58b";
private const string SUMMARYFIELD = "403979a3-ccba-4baa-a885-2abca754cc69";
private const string STATUSFIELD = "7794d725-feb5-4516-9786-d18684892106";

Вы захотите проверить входящие сообщения, чтобы увидеть, нет ли в них текста, а затем ответить так, как будто это возможное действие отправки. Вы можете сделать это, когда LUIS уже определил намерение как «Нет», но вы также можете выполнить проверку еще до того, как сообщение будет отправлено в LUIS. Перейдите к методу RouteAsync MainDialog и оберните весь существующий код в блок else, а затем вы можете поместить код, который отвечает на действие отправки, в свой блок if:

protected override async Task RouteAsync(DialogContext dc, CancellationToken cancellationToken = default(CancellationToken))
{
    if (string.IsNullOrEmpty(activity.Text))
    {
        dynamic value = dc.Context.Activity.Value;

        await turnContext.SendActivityAsync($"Ticket = {value[TICKETFIELD]}, Summary = {value[SUMMARYFIELD]}, Status = {value[STATUSFIELD]}");
    }
    else
    {
        // All the code that was already there
    }
}

Когда вы когда-либо нажимаете кнопку «Отправить» в адаптивной карточке, канал отправляет обратно токен «postback»: «true» в объекте данных канала. Наряду с этим данные, настроенные для кнопки отправки, отправляются в объект Value в файле json. Вам необходимо проанализировать это значение, чтобы получить сведения, необходимые для дальнейших действий. Я опубликовал сообщение об этом. Пожалуйста, проверьте это на Реактивные адаптивные карты BotFramework: как читать данные о кнопках действий в адаптивных картах

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