Есть несколько вещей, которые могут происходить с этим.
- MembersAdded вызывается для добавления как бота, так и пользователя. Наверное, поэтому его отправляют дважды.
Если вы используете более новый ActivityHandler, вы можете использовать:
protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
foreach (var member in membersAdded)
{
if (member.Id != turnContext.Activity.Recipient.Id)
{
userProfile.Welcome = true;
var reply = turnContext.Activity.CreateReply();
reply.Attachments = new List<Attachment>();
reply.Attachments.Add(getCard("Welcome"));
await turnContext.SendActivityAsync(reply);
}
}
}
Или, если вы используете старый обработчик активности:
public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
{
if (activity.Type == ActivityTypes.ConversationUpdate)
{
if (activity.MembersAdded != null)
{
foreach (var member in activity.MembersAdded)
{
if (member.Name != "Bot" && member.Name != null)
{
userProfile.Welcome = true;
var reply = turnContext.Activity.CreateReply();
reply.Attachments = new List<Attachment>();
reply.Attachments.Add(getCard("Welcome"));
await turnContext.SendActivityAsync(reply);
}
}
}
}
[...]
WebChat не отправляет автоматически ConversationUpdate, как эмулятор. См. Этот пример веб-чата , чтобы узнать, как отправить приветственное событие.
Вы всегда можете убедиться, что он не посылает дважды, проверив, если userProfile.Welcome != true
Этот образец может помочь.