Как мне прикрепить AdaptiveCardFromJson в LUIS Bot C #? - PullRequest
0 голосов
/ 12 октября 2018

Я недавно задавал похожий вопрос, но не был достаточно конкретным.Я вижу, что есть некоторый код с пакетом AdaptiveCards NuGet для присоединения AdaptiveCardFromJson и AdaptiveCardFromSDK, который доступен в рамках обычной модели бота Microsoft.

Тем не менее, под моделью бота Microsoft LUIS это не вариант, вот код, который у меня есть, который возвращает результат поиска сотрудника из поиска в БД SQL:

    [LuisIntent("Who_is_Employee")]
    public async Task Who_is_EmployeeIntent(IDialogContext context, LuisResult result)
    {
        EntityRecommendation recommendation;
        if (result.TryFindEntity("Communication.ContactName", out recommendation))
        {
            List<Employee> results = EmployeeService.FindEmployees(recommendation.Entity);
            if (results.Count > 0)
            {
                string response = "";
                foreach (Employee e in results)
                {
                    string name = e.FullName;
                    string title = e.JobTitle;
                    response += " " + name + " " + title + "\n";
                }
                await context.PostAsync(response);
            }
        }
        else
        {
            await context.PostAsync(" Sorry, I couldn't find who you were looking for.");
        }
    }

Мне бы хотелосьинформация, которая будет возвращена как AdaptiveCard, как мне этого достичь?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Это был код, который мне пришлось использовать, чтобы добиться успеха:

        [LuisIntent("Who_is_Employee")]
    public async Task Who_is_EmployeeIntent(IDialogContext context, LuisResult result)
    {
        EntityRecommendation recommendation;
        if (result.TryFindEntity("Communication.ContactName", out recommendation))
        {
            List<Employee> results = EmployeeService.FindEmployees(recommendation.Entity);
            if (results.Count > 0)
            {
                /* Single line per result */
                /*
                string response = "";
                foreach (Employee e in results)
                {
                    string name = e.FullName;
                    string title = e.JobTitle;
                    response += " " + name + " " + title + "\n";
                }
                await context.PostAsync(response);
                */

                /* Adaptive card per result */
                // Load json template
                string physicalPath = System.Web.HttpContext.Current.Server.MapPath("../AdaptiveCards/EmployeeLookup.json");
                string jsonTemplate = "";
                using (StreamReader r = new StreamReader(physicalPath))
                {
                    jsonTemplate = r.ReadToEnd();
                }

                var respsonse = context.MakeMessage();

                foreach (Employee e in results)
                {
                    string employeeJson = jsonTemplate;

                    employeeJson = employeeJson.Replace("{{FullName}}", e.FullName);
                    employeeJson = employeeJson.Replace("{{JobTitle}}", e.JobTitle);
                    employeeJson = employeeJson.Replace("{{Reference}}", e.Reference);
                    employeeJson = employeeJson.Replace("{{Phone}}", e.Phone);
                    employeeJson = employeeJson.Replace("{{Email}}", e.Email);
                    employeeJson = employeeJson.Replace("{{Mobile}}", e.Mobile);

                    AdaptiveCard card = AdaptiveCard.FromJson(employeeJson).Card;

                    Attachment attachment = new Attachment()
                    {
                        ContentType = AdaptiveCard.ContentType,
                        Content = card
                    };
                    respsonse.Attachments.Add(attachment);
                }

                await context.PostAsync(respsonse);
            }
        }
        else
        {
            await context.PostAsync(" Sorry, I couldn't find who you were looking for.");
        }
    }
0 голосов
/ 12 октября 2018

Марк, вам нужно создать свою адаптивную карту как json или использовать SDK для создания экземпляра AdaptiveCard. Здесь - отличное место, чтобы узнать больше об этом.

После того, как вы создали свою карту и получили экземпляр класса AdaptiveCard, вам нужно создать новое сообщение и прикрепить карту к этому сообщению.Новое сообщение - это то, что вы отправите обратно пользователю.

Код будет выглядеть примерно так

var card = AdaptiveCard.FromJson(<your json here>);

Attachment attachment = new Attachment()
{
    ContentType = AdaptiveCard.ContentType,
    Content = card
};

var myRespsonse = context.MakeMessage();
myRespsonse.Attachments.Add(attachment);

await context.PostAsync(myRespsonse, CancellationToken.None);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...