You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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到点用保存的信息主动发提醒)。

具体到技术层面,就是两步:

  1. 「存联系方式」——保存对话引用
    当用户第一次和Bot聊天时,Bot能拿到一个叫ConversationReference的东西,这就相当于用户的「对话联系方式」,里面包含了怎么找到用户、怎么和用户对话的关键信息。我们要把这个东西存到数据库、Redis或者其他存储里,就像存手机号一样。
  2. 「到点触发」——主动发起对话
    用定时任务工具(比如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:47:49