首页 > 解决方案 > Bot 在 Web 客户端中启动时不欢迎用户加入

问题描述

每当用户在 OnMembersAdded 方法中加入与我的机器人的对话时,我都添加了一条自定义消息,它也适用于 Bot Emulator ,机器人会发送一条带有他/她名字的主动消息问候用户。

但是在 Web 客户端上,当用户首先输入时,bot 会发送消息,然后它会发送一条问候消息,这会中断流程。

我处理用户加入会话的代码

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


        }

标签: c#botframeworkwebclientdirect-line-botframework

解决方案


您可以尝试在客户端添加一个 store 方法,然后您可以通过 bot 框架发送问候消息 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);

            }
        }

推荐阅读