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

如何创建可主动监控并发送消息的Azure聊天机器人(无需用户触发)

嘿,兄弟,我刚好做过类似的Azure主动推送机器人,给你梳理下核心步骤,应该能帮你搞定!

实现Azure机器人主动推送消息的核心方案

1. 先搞定对话上下文的存储

机器人要主动发消息,必须先和用户建立过至少一次对话——这是前提。因为只有这样,你才能获取到用户的conversation reference(对话引用),这个信息是后续主动推送的关键,得存在数据库或者Azure存储服务里,比如Azure Table Storage或者Cosmos DB。

当用户第一次和机器人对话时,你可以在消息处理逻辑里捕获并保存这个引用:

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    // 提取当前对话的引用信息
    var conversationReference = turnContext.Activity.GetConversationReference();
    // 把引用存到你的存储服务里,这里用模拟的存储类举例
    await _conversationStore.SaveConversationReferenceAsync(conversationReference);
    
    // 其他常规对话逻辑...
    await turnContext.SendActivityAsync("已完成初始化,后续系统异常会主动通知你!");
}

2. 搭建监控+触发推送的服务

你需要一个独立的后台服务来监控系统状态,比如用Azure Function(定时触发)、Web Job,或者自己写的后台程序。当检测到异常时,调用机器人的主动消息接口。

用Azure Function做监控推送的示例:

假设你用定时触发器每5分钟检查一次系统状态,发现异常就推送:

public async Task Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
{
    // 1. 模拟监控逻辑:检查系统是否出现异常
    bool systemHasError = CheckSystemHealthStatus();
    if (!systemHasError) return;

    // 2. 从存储中取出所有需要通知的用户对话引用
    var targetConversations = await _conversationStore.GetAllValidReferencesAsync();

    // 3. 初始化机器人适配器,用来建立连接
    var adapter = new BotFrameworkAdapter(new ConfigurationCredentialProvider(_configuration));
    
    // 4. 遍历用户,逐个发送告警消息
    foreach (var reference in targetConversations)
    {
        await adapter.ContinueConversationAsync(
            _configuration["MicrosoftAppId"], 
            reference, 
            async (context, token) =>
            {
                await context.SendActivityAsync(MessageFactory.Text("⚠️ 系统告警:XX服务数据库连接超时,请尽快排查!"), token);
            }, 
            CancellationToken.None);
    }
}

3. 配置机器人的权限和访问规则

  • 确保监控服务里配置了正确的机器人MicrosoftAppId和MicrosoftAppPassword,这样适配器才能通过Azure的身份验证。
  • 如果机器人部署在Azure App Service,要检查CORS设置,允许监控服务的域名访问(测试阶段可以暂时放开所有域名)。
  • 确认机器人的消息端点(比如/api/messages)没有被防火墙、NSG规则或者App Service的IP限制挡住,要能被外部服务访问。

4. 几个要注意的细节

  • 对话引用的有效性:如果用户删除了对话、更换了设备,之前保存的引用可能失效,记得在推送失败时清理这些无效数据,或者定期做校验。
  • 推送频率控制:别一股脑狂发消息打扰用户,监控服务里加个防抖或者频率限制逻辑,比如同一异常5分钟内只推一次。
  • 多渠道适配:如果你的机器人支持Teams、Web Chat等多渠道,不同渠道的对话引用格式略有差异,存储的时候最好把渠道类型也记录下来。

其实核心就是利用Bot Framework的ContinueConversationAsync方法,结合预先存储的对话引用,实现主动触发消息。之前你没找到方法,可能是没聚焦到「Proactive Messages」这个官方关键词,这就是Azure机器人实现主动推送的标准方案。

内容的提问来源于stack exchange,提问作者D. Manjali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:49:04