我正在使用 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);
}
它没有抛出任何异常,只是没有按照我的预期进行。