Microsoft Teams机器人向团队的每个成员发送主动消息

时间:2020-01-09 16:42:40

标签: c# botframework bots chatbot proactive

我正在使用Microsoft C#Bot框架v4构建一个Bot。第一次将漫游器添加到团队时,我希望它主动向团队中的每个成员1:1消息进行自我介绍。我知道即使用户以前没有与机器人进行交互,也应该可以与用户聊天。 documentation中描述了此过程:

在使用主动消息传递向用户发送欢迎消息时,必须记住,对于大多数接收消息的人来说,他们没有接收消息的原因。这也是他们第一次与您的应用进行互动;这是您创造良好的第一印象的机会。最好的欢迎信息包括:

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

对我来说,这表明我应该能够与该频道的每个成员发起聊天消息,但是我无法让漫游器向该频道中除我以外的任何人发送消息。在Microsoft提供的TeamsConversationBot sample中,有一个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);
    }

它没有抛出任何异常,只是没有按照我的期望做。

0 个答案:

没有答案