MS Enterprise Bot (v4) - как точно сделать упоминание пользователя программно - PullRequest
0 голосов
/ 03 мая 2019

Я очень устал от неполной документации Microsoft. Я несколько дней бился в мою голову, просто чтобы упомянуть пользователя. Просканировал Интернет на наличие фрагментов кода и попытался объединить, но я все еще не заставил его работать.

var reply = turnContext.Activity.CreateReply($"Test mention <at>@{name}</at>");
var entity = new Entity();
                entity.SetAs(new Mention()
                {
                    Text = $"<at>@{name}</at>",
                    Mentioned = new ChannelAccount()
                    {
                        Name = $"{name}",
                        Id = id
                    }
                });

if (turnContext.Activity.Entities == null || !turnContext.Activity.Entities.Any())
            {
                var list = new List<Entity> { entity };
                turnContext.Activity.Entities = list;
            }
            else
                turnContext.Activity.Entities.Add(entity);

await turnContext.SendActivityAsync(reply);

У кого-нибудь есть мысли о том, как программно публиковать / отправлять / отвечать на сообщения с упоминанием пользователя?

Заранее спасибо.

1 Ответ

1 голос
/ 03 мая 2019

Я прошу прощения, что документация не была легко найти. Упоминания еще не полностью поддерживаются как в dotnet, так и в Node SDK. Однако это возможно сделать с текущим Dotnet SDK. Редактировать: теперь это полностью поддерживается в обоих SDK

Ваш код выглядит довольно хорошо, за исключением того, что вы добавляете сущность к TurnContext, а не к reply I , думаю , это ваша проблема). Попробуйте это, которое я протестировал и работает:

var userId = "29:1lpScfExyzx-asdfasdfasdfasdf_fasdfasdfasdfasdfasdfasdfasdfasdfasdf";
var userName = "YourName";

var reply = turnContext.Activity.CreateReply();

reply.Text = $"<at>{ userName }</at> testing....";

var mentioned = new ChannelAccount()
{
    Id = userId,
    Name = userName
};

var entity = new Mention()
{
    Mentioned = mentioned,
    Text = $"<at>{ userName }</at>",
};

reply.Entities = new List<Entity>() { entity };

await turnContext.SendActivityAsync(reply);

Убедитесь, что reply.Text содержит entity.Text, иначе это не будет работать (в примере <at>{ userName }</at> в обоих).

Если вы столкнулись с проблемами, Visual Studio не предоставляет много информации об ошибках. Однако если вы откроете Azure> Bot вашего веб-приложения> Каналы и посмотрите на проблемы каналов в группах, это даст немного больше информации о том, что может быть не так.

Команды также имеют Botbuilder Teams Dotnet SDK , в котором есть дополнительная документация и методы. Он действует как обертка вокруг Botbuilder SDk, чтобы упростить некоторые специфичные для команды вещи. Обратите внимание, что этот вариант довольно сложен для поиска и отличается от этого SDK , который поддерживает только ботов V3.

...