2

我正在使用 Microsoft C# 机器人框架 v4 构建一个机器人。当机器人第一次加入团队时,我希望它主动 1:1 向团队的每个成员发送消息,介绍自己。我知道应该可以与用户开始聊天,即使用户之前没有与机器人进行过交互。此过程在文档中进行了描述:

当使用主动消息向用户发送欢迎消息时,您必须记住,对于大多数接收消息的人来说,他们不会知道为什么会收到消息。这也是他们第一次与您的应用互动;这是你创造良好第一印象的机会。最好的欢迎信息将包括:

  • 他们为什么会收到此消息。用户应该非常清楚为什么他们会收到消息。如果您的机器人安装在频道中,并且您向所有用户发送了欢迎消息,请让他们知道安装在哪个频道中以及可能是谁安装了它。

对我来说,这表明我应该能够与频道的每个成员发起聊天消息,但我无法让机器人向频道中除我以外的任何人发送消息。在 Microsoft 提供的TeamsConversationBot 示例中,有一个 MessageAllMembers() 方法似乎是我正在寻找的方法,但是当我在代码中调用它并将机器人添加到 Teams 中的团队时,机器人只会向我发送消息。

这是我正在使用的 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);
    }

它没有抛出任何异常,只是没有按照我的预期进行。

4

0 回答 0