Приветственное сообщение с интерфейсом Ibot - PullRequest
0 голосов
/ 27 мая 2019

Я использую интерфейс Ibot, но приветственное сообщение отправляется дважды. Я использую метод OnTurnAsync, и кажется, что он ничего не делает, когда я вызываю свойство MembersAdded.

Чтобы отправить приветственное сообщение, у меня есть этот код:

if (turnContext.Activity.Type == ActivityTypes.ConversationUpdate && turnContext.Activity.MembersAdded.Count == 1)
        {

            userProfile.Welcome = true;


            var reply = turnContext.Activity.CreateReply();
            reply.Attachments = new List<Attachment>();
            reply.Attachments.Add(getCard("Welcome"));

            await turnContext.SendActivityAsync(reply);
        }

1 Ответ

1 голос
/ 27 мая 2019

Есть несколько вещей, которые могут происходить с этим.

  1. 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);
                }
            }
        }
    }

    [...]
  1. WebChat не отправляет автоматически ConversationUpdate, как эмулятор. См. Этот пример веб-чата , чтобы узнать, как отправить приветственное событие.

  2. Вы всегда можете убедиться, что он не посылает дважды, проверив, если userProfile.Welcome != true Этот образец может помочь.

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