Бот Microsoft Teams отправляет проактивные сообщения каждому члену команды - PullRequest
0 голосов
/ 09 января 2020

Я создаю бота, используя Microsoft C# bot Framework v4. Когда бот впервые добавляется в команду, я хочу, чтобы он проактивно сообщал 1: 1 каждому члену команды, представляя себя. Я знаю, что должна быть возможность начать чат с пользователем, даже если пользователь ранее не взаимодействовал с ботом. Этот процесс описан в документации :

При использовании проактивного обмена сообщениями для отправки приветственного сообщения пользователю необходимо помнить, что для большинства людей, получающих сообщение, они получат нет контекста, почему они его получают. Это также первый раз, когда они взаимодействуют с вашим приложением; это ваша возможность создать хорошее первое впечатление. Лучшие приветственные сообщения будут включать:

  • Почему они получают это сообщение. Для пользователя должно быть очень ясно, почему они получают сообщение. Если ваш бот был установлен в канал, и вы отправили приветственное сообщение всем пользователям, сообщите им, на какой канал он был установлен и, возможно, кто его установил.

Для меня это означает, что Я должен иметь возможность инициировать чат-сообщение с каждым участником канала, но я не могу заставить бота отправлять сообщения кому-либо на канале, кроме меня. В примере TeamsConversationBot , предоставленном Microsoft, есть метод MessageAllMembers (), который, кажется, является тем, что я ищу, однако, когда я вызываю его в своем коде и добавляю бота в команду в командах, бот только сообщает мне.

Вот код MessageAllMembers (), который я использую:

private async Task MessageAllMembersAsync(ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
    {
        var Id = turnContext.Activity.TeamsGetChannelId();
        var serviceUrl = turnContext.Activity.ServiceUrl;
        var credentials = new MicrosoftAppCredentials(_configuration["MicrosoftAppId"], _configuration["MicrosoftAppPassword"]);
        ConversationReference conversationReference = null;

        var members = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken);

        foreach (var teamMember in members)
        {
            if (teamMember.Id != turnContext.Activity.Recipient.Id) {
                var proactiveMessage = MessageFactory.Text($"Hello {teamMember.GivenName} {teamMember.Surname}. I'm a Teams conversation bot.");

                var conversationParameters = new ConversationParameters
                {
                    IsGroup = false,
                    Bot = turnContext.Activity.Recipient,
                    Members = new ChannelAccount[] { teamMember },
                    TenantId = turnContext.Activity.Conversation.TenantId,
                };

                await ((BotFrameworkAdapter)turnContext.Adapter).CreateConversationAsync(
                    Id,
                    serviceUrl,
                    credentials,
                    conversationParameters,
                    async (t1, c1) =>
                    {
                        conversationReference = t1.Activity.GetConversationReference();
                        await ((BotFrameworkAdapter)turnContext.Adapter).ContinueConversationAsync(
                            _configuration["MicrosoftAppId"],
                            conversationReference,
                            async (t2, c2) =>
                            {
                                await t2.SendActivityAsync(proactiveMessage, c2);
                            },
                            cancellationToken);
                    },
                    cancellationToken);
            }
        }

        await turnContext.SendActivityAsync(MessageFactory.Text("All messages have been sent."), cancellationToken);
    }

Он не выдает никаких исключений, он просто не выполняет то, что я ожидаю.

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