我有一条欢迎消息,配置为在我的机器人第一次启动时出现在 MessagesController 中。
private Activity HandleSystemMessage(Activity message)
{
if (message.Type == ActivityTypes.ConversationUpdate)
{
// returning a msg here to the Post method in MessagesController.
}
}
当我调试时,似乎在启动时,两个线程正在运行机器人,并且两个线程都在 Post 方法中执行,因此两个线程都在调用处理系统消息。这对我来说是一个问题,因为有两个线程执行该方法,我的欢迎消息在屏幕上打印两次。
我尝试锁定打印消息并将其中一个线程置于睡眠状态,但没有任何效果。我不知道为什么一开始就有两个线程在执行。
它们有必要吗?它们都运行相同的执行。我可以杀掉其中一个吗?或者是否有不同的方式来打印机器人的欢迎消息?
当 Web 通道和机器人之间建立第一个对话时,ConversationUpdate 活动会引发两次。一次由用户发出,另一次由渠道发出,因此我们收到两次欢迎消息。
我们需要确保发送针对用户提出的活动的欢迎消息。
这段代码帮助我避免了这个问题。
private async Task GreetUserAsync(ITurnContext turnContext, CancellationToken cancellationToken)
{
if (turnContext.Activity.Type == ActivityTypes.ConversationUpdate &&
turnContext.Activity.MembersAdded[0].Id.Contains(turnContext.Activity.Recipient.Id))
await turnContext.SendActivityAsync(MessageFactory.Text("Hi, how can I help you."));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)