Бот не приветствует присоединенного пользователя при запуске в веб-клиенте

Я добавил настраиваемое сообщение всякий раз, когда пользователь присоединяется к беседе с моим ботом в методе OnMembersAdded, он также хорошо работает с эмулятором бота, бот отправляет активное сообщение, приветствующее пользователя с его / ее именем.

Но в веб-клиенте бот отправляет сообщение, когда пользователь сначала вводит текст, а затем отправляет приветственное сообщение, которое прерывает поток.

мой код для обработки сеанса, присоединенного к пользователю

 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)
                    {
                        await turnContext.SendActivityAsync(MessageFactory.Text($"Hi {firstName.ToLower()}, I am at your service."), cancellationToken);
                    }
                }


        }

person Nikhil Bansal    schedule 12.12.2019    source источник
comment
github.com/microsoft/BotFramework-WebChat/issues/   -  person tdurnford    schedule 12.12.2019
comment
Принятие / голосование ответа служит большему сообществу Stack Overflow и всем, у кого есть аналогичный вопрос. Если вы считаете, что моего ответа было достаточно, примите его и проголосуйте за него. Если нет, дайте мне знать, чем еще я могу помочь   -  person Jegan Baskaran    schedule 16.03.2020


Ответы (2)


Вы можете попробовать добавить метод store на стороне клиента, и с его помощью вы можете отправить приветственное сообщение методом oneventasync через структуру бота.

следующий код является рабочим решением:

метод хранения на сайте клиента:

const store = window.WebChat.createStore(
    {},
    ({ dispatch }) => next => action => {
        if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
            dispatch({
                type: 'WEB_CHAT/SEND_EVENT',
                payload: {
                    name: 'webchat/join',
                    value:{
                    "userName":name,
                    "eMail":mail 
                    },

                }
            });

        }

На стороне сервера - код бота:

protected override async Task OnEventActivityAsync(ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
        {

            var objectdata = JsonConvert.DeserializeObject<dynamic>(turnContext.Activity.Value.ToString());

            data _data = new data();
            _data.username = objectdata["userName"];
            _data.eMail= objectdata["eMail"];


            if (turnContext.Activity.Name == "webchat/join")
            {
                    await turnContext.SendActivityAsync(MessageFactory.Text($"Good Morning! \n\n **{_data.username}** \n {WelcomeText}"), cancellationToken);

            }
        }
person Jegan Baskaran    schedule 16.03.2020

Посмотрите на этот рабочий пример и объяснение того, как отправить Приветственное сообщение из WebChat.

person Marc Asmar    schedule 12.12.2019
comment
И это обновление разговора будет использоваться внутри метода onMessageActivityAsync? - person Nikhil Bansal; 12.12.2019
comment
Вы используете botframework V3 или V4, и есть ли у вас шаблон / проект, на котором вы основываете свое решение? Если да, я могу проверить их и вернуться к вам, где именно их использовать. - person Marc Asmar; 12.12.2019
comment
Я использую v4, я использую модель отправки, полученную от лазурного - person Nikhil Bansal; 12.12.2019
comment
Похоже, есть проблема с WebChat и приветственным событием, пожалуйста, проверьте мой обновленный ответ, чтобы решить эту проблему. - person Marc Asmar; 12.12.2019
comment
@MarcAsmar Проблема не столько, сколько в задуманном дизайне. В вашем ответе тоже была неработающая ссылка, которую я исправил. Это можно сделать в веб-чате, как показано в примере; специально отправить событие приветствия. - person mdrichardson; 12.12.2019