QnA Maker Bot AdaptiveCards: как добавить объект данных в C# - PullRequest
2 голосов
/ 22 февраля 2020

Я использовал способ «без кода» для создания бота в Azure и подключил его к базе знаний QnA Maker.

Затем я изменил код, чтобы бот использовал AdaptiveCards вместо HeroCards для поддержки форматирования Markdown в канале MS Teams (формат, используемый QnA Maker).

Я пытаюсь добавить SubmitActions к этим адаптивным картам, когда из базы знаний поступают некоторые подсказки. Цель состоит в том, чтобы, если пользователь нажимает на данные SubmitActions, он автоматически отправляет сообщение обратно боту.

Ниже приведен код, который я реализовал:

// adaptive card creation
var plCardBis = new AdaptiveCard(new AdaptiveSchemaVersion(1, 0));
plCardBis.Body.Add(new AdaptiveTextBlock()
{
    Text = result.Answer,
    Wrap = true
});

// Add all prompt
foreach (var prompt in result.Context.Prompts)
{
    plCardBis.Actions.Add(new AdaptiveCards.AdaptiveSubmitAction()
    {
        Title = prompt.DisplayText,
        Data = prompt.DisplayText
    });
}
//create the the attachment
var attachmentBis = new Attachment()
{
    ContentType = AdaptiveCard.ContentType,
    Content = plCardBis
};

//add the attachment
chatActivity.Attachments.Add(attachmentBis);

return chatActivity;

Это прекрасно работает в WebChat. однако в командах, если я нажму на приглашение, он выдаст ошибку. Глядя на inte rnet, я обнаружил, что должен использовать объект для поля данных для команд вместо простой строки:

"data": {
"msteams": {
    "type": "imBack",
    "value": "Text to reply in chat"
    },
}

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

Любая помощь будет принята с благодарностью

1 Ответ

1 голос
/ 22 февраля 2020

По сути, есть две опции для того, что вы можете прикрепить к «данным» - либо просто строковое значение, либо любой пользовательский объект. Для вашего сценария вам нужен пользовательский объект, поэтому вам нужно определить класс в вашем проекте, который будет соответствовать тому, что вам нужно, например:

public class MsTeamsDataResponseWrapper
{
  [JsonProperty("msteams")]
  public MsTeamsResponse MsTeamsResponse { get; set; }
}

public class MsTeamsResponse
{
  [JsonProperty("type")]
  public string Type { get; set; } = "imBack";

  [JsonProperty("value")]
  public string Value { get; set; }
}

, тогда вы будете использовать его следующим образом:

...
Data = new MsTeamsDataResponseWrapper() { MsTeamsResponse = new MsTeamsResponse() { Value = prompt.DisplayText } }
...

В этом случае «Тип» по умолчанию уже имеет значение «imBack», но вы также можете использовать его для «messageBack» на более позднем этапе, если хотите перезаписать значение по умолчанию.

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