c# - 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);
}
}
}
解决方案
您可以尝试在客户端添加一个 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);
}
}
推荐阅读
- c++ - 在函数未定义参考 c++
- python - 如果 pip install -r requirements.txt 被中断,已经安装的包会被删除吗?
- google-apis-explorer - 使用具有自我用户身份验证的 Google APi 进行项目
- ios - 无法将我的 Objective-c 类的基类设置为 swift 类
- javascript - 如何使 HTML 范围输入仅在滑动时起作用?
- javascript - 悬停在省略号上时显示跨度标题
- python - python中的JSON数据验证
- linq - 加入后的Linq过滤器
- javascript - 如何重用 Select2 对象的 ID 和名称
- php - PHP无法将变量读取为变量