关于BotFramework V4(C#)实现提醒功能及主动机器人的咨询
BotFramework V4 C# 提醒功能实现&Proactive Bot通俗解析
Hey 老铁!刚好我之前用BotFramework V4 + C#做过类似的提醒功能,没错,这类主动推送的提醒必须得靠Proactive Bot来实现,我给你用大白话讲明白~
一、为什么提醒功能需要Proactive Bot?
咱们先搞清楚普通Bot和Proactive Bot的核心区别:
- 普通Bot是「被动响应」:只有用户先给Bot发消息,Bot才能回消息,就像你不找客服,客服不会主动理你。
- 而提醒功能是「主动触发」:到了指定时间,Bot要主动蹦出来给用户发消息,这时候普通Bot就做不到了,必须用Proactive Bot——它的核心能力就是不用等用户发起,Bot主动发起对话。
二、Proactive Bot的工作原理(大白话版)
我给你举个生活化的例子:
你第一次去常去的奶茶店,留了手机号给店员(相当于用户第一次和Bot对话,Bot保存用户的对话信息);到了你的会员日,店员主动给你发消息送满减券(相当于Bot到点用保存的信息主动发提醒)。
具体到技术层面,就是两步:
- 「存联系方式」——保存对话引用
当用户第一次和Bot聊天时,Bot能拿到一个叫ConversationReference的东西,这就相当于用户的「对话联系方式」,里面包含了怎么找到用户、怎么和用户对话的关键信息。我们要把这个东西存到数据库、Redis或者其他存储里,就像存手机号一样。 - 「到点触发」——主动发起对话
用定时任务工具(比如Hangfire、Quartz.NET)或者后台服务,设置好提醒时间。时间一到,就把之前存的ConversationReference取出来,通过BotFramework的适配器调用API,主动给用户发消息,完成提醒。
三、C#实现的核心代码片段
1. 保存对话引用(用户第一次交互时)
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken) { // 从当前对话上下文里拿到对话引用 var conversationReference = turnContext.Activity.GetConversationReference(); // 把对话引用存到数据库/Redis,这里需要你自己实现保存逻辑 await SaveConversationReferenceToStorage(conversationReference); await turnContext.SendActivityAsync("已为你设置提醒,到点我会主动通知你哦~"); }
2. 主动发送提醒消息(定时任务中调用)
// 注入适配器和配置,这里用依赖注入的方式获取 private readonly BotFrameworkAdapter _adapter; private readonly IConfiguration _configuration; public ReminderService(BotFrameworkAdapter adapter, IConfiguration configuration) { _adapter = adapter; _configuration = configuration; } public async Task SendReminderAsync(ConversationReference conversationReference) { // 通过对话引用,主动继续和用户的对话 await _adapter.ContinueConversationAsync( _configuration["MicrosoftAppId"], conversationReference, async (turnContext, ct) => { // 这里就是要发送的提醒内容 await turnContext.SendActivityAsync("叮!你的专属提醒已送达~"); }, CancellationToken.None); }
四、注意事项
- 确保Bot的
MicrosoftAppId和MicrosoftAppPassword配置正确,不然Bot没有权限主动发起对话。 - 存储
ConversationReference时,要注意序列化(比如转成JSON),因为它是复杂对象,直接存数据库会有问题。 - 定时任务的选择:如果是简单场景,用Hangfire很方便;复杂的定时规则可以用Quartz.NET。
内容的提问来源于stack exchange,提问作者user10860402
相关产品推荐
相关产品推荐

