我已将欢迎消息配置为在第一次启动bot时出现在MessagesController中。
private Activity HandleSystemMessage(Activity message)
{
if (message.Type == ActivityTypes.ConversationUpdate)
{
// returning a msg here to the Post method in MessagesController.
}
}
当我调试时,似乎在开始时,两个线程正在运行bot,并且都在Post方法中执行,因此都在调用HandleSystemMessage。这对我来说是一个问题,因为有两个线程执行该方法,我的欢迎消息将在屏幕上打印两次。
我试图锁定打印msg并将其中一个线程Hibernate,但没有一个工作。我不知道为什么有两个线程开始执行。
它们有必要吗?他们都在执行相同的死刑。我能杀了他们中的一个吗?或者有没有不同的方法为机器人打印欢迎信息?
或者,您可以尝试此代码
else if (message.Type == ActivityTypes.ConversationUpdate)
{
ConnectorClient connector = new ConnectorClient(new Uri(message.ServiceUrl));
var reply = message.CreateReply(BotMessages.WelcomeMessage);
connector.Conversations.SendToConversation(reply);
reply = message.CreateReply();
reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
reply.Attachments = HelpTextDialog.GetMessageCard();
connector.Conversations.SendToConversation(reply);
}
您可能正在返回加入聊天的机器人和用户的消息。如果没有看到对话中的代码更新根对话框中的if-ther语句的一部分,很难判断。您可以使用以下代码发布一条消息
else if (message.Type == ActivityTypes.ConversationUpdate)
{
// Handle conversation state changes, like members being added and removed
// Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
// Not available in all channels
IConversationUpdateActivity iConversationUpdated = message as IConversationUpdateActivity;
if (iConversationUpdated != null)
{
ConnectorClient connector = new ConnectorClient(new System.Uri(message.ServiceUrl));
foreach (var member in iConversationUpdated.MembersAdded ?? System.Array.Empty<ChannelAccount>())
{
// if the bot is added, then
if (member.Id == iConversationUpdated.Recipient.Id)
{
var reply = ((Activity) iConversationUpdated).CreateReply(
$"Hi! I'm Botty McBotface and this is a welcome message");
await connector.Conversations.ReplyToActivityAsync(reply);
}
}
}
}
在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."));
}
如何防止机器人连续两次发送相同的欢迎消息?我认为这与定义服务器消息意图有关。 client.on: 客户频道。隐藏物获取('channelID')。发送(“欢迎”);
该站点的目标是成为 Jekyll 的全面指南。包括一些内容如:搭建和运行你的站点、创建以及管理内容、定制站点的展现和外观、在不同的环境中发布、以及参与到 Jekyll 将来的开发的一些建议。 Jekyll 究竟是什么? Jekyll 是一个简单的博客形态的静态站点生产机器。它有一个模版目录,其中包含原始文本格式的文档,通过一个转换器(如 Markdown)和我们的 Liquid 渲染器转化成一个完
欢迎来到 Libra 开发者站点! Libra 的使命是建立一套简单的全球货币和金融基础设施,为数十亿人服务。 The world truly needs a reliable digital currency and infrastructure that together can deliver on the promise of “the internet of money.” Securi
我需要我的discord机器人记住在不同的行会中向哪个频道发送问候。目前,我将频道名称作为前缀,并使用它来回忆发送到何处: 我如何设置一个命令,当机器人加入他们的公会时,所有者可以使用该命令,为每个公会设置一个唯一的欢迎通道(并且显然只向加入公会的人发送欢迎消息)。 哦,我如何设置一个命令,最终让人们改变他们公会的欢迎信息? 谢谢!:)
所以我做了一个机器人,它会在一个频道里向新成员发送欢迎信息。我的代码应该工作,因为它没有在我的控制台上发送任何错误,但是我的机器人没有发送欢迎消息。 我尝试了很多东西: > 使嵌入对象成为对象(nope) 做了4个长的不同代码(都不工作) 我在用discord.js@v12 代码:
我正在开发一个基于微软bot框架的多渠道bot(专注于web和电报)(https://docs.microsoft.com/en-us/azure/bot-service/?view=azure-bot-service-4.0) 我被用户收到的最初消息所困扰。我的机器人基于Microsoft发布的复杂机器人:https://github.com/Microsoft/BotFramework-Sam