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

如何获取Azure Notification Hub推送通知的回调用户接收统计信息?

如何获取Azure Notification Hub带Tag推送的用户及数量统计

我之前也碰到过类似的需求,Azure Notification Hub的直接推送回调确实不会返回具体推送给哪些用户的明细,但可以通过以下几种方式来实现你的统计需求:

1. 利用Azure Monitor的诊断日志获取推送明细与数量

Azure Notification Hub支持将推送日志导出到Azure Monitor,你可以通过这些日志来统计成功推送的用户数,甚至查看具体的推送对象信息:

  • 第一步:开启诊断日志
    在Azure Portal中找到你的Notification Hub,进入「诊断设置」,添加新的设置,勾选NotificationHubLogs并选择保存到Log Analytics工作区。

  • 第二步:用Node.js查询日志统计数量
    使用@azure/monitor-query SDK来查询Log Analytics中的日志,筛选出对应通知的成功推送记录。示例代码如下:

    const { LogsQueryClient, AzureKeyCredential } = require("@azure/monitor-query");
    const client = new LogsQueryClient(new AzureKeyCredential("<你的工作区密钥>"));
    
    async function getNotificationStats(notificationId) {
      const query = `NotificationHubLogs
        | where NotificationId == "${notificationId}"
        | where Outcome == "Success"`;
      const result = await client.queryWorkspace("<你的工作区ID>", query, {
        timespan: { start: new Date(Date.now() - 3600000), end: new Date() }
      });
    
      // 成功推送的数量
      const successCount = result.tables[0].rows.length;
      // 如果需要,可以提取每条记录的RegistrationId等信息
      const recipients = result.tables[0].rows.map(row => row[4]); // RegistrationId位置根据实际日志结构调整
      return { successCount, recipients };
    }
    
    getNotificationStats("<你的通知ID>").then(console.log);
    

2. 发送前查询符合Tag条件的注册数

如果你需要提前知道目标用户数量,可以在发送通知前,先查询对应Tag下的所有注册记录:

使用@azure/notification-hubs SDK的getRegistrationsByTag方法,注意处理分页(因为注册数较多时会分批返回):

const { NotificationHubClient } = require("@azure/notification-hubs");
const client = new NotificationHubClient("<连接字符串>", "<Hub名称>");

async function countTagRegistrations(tag) {
  let totalCount = 0;
  let continuationToken = null;
  do {
    const registrations = await client.getRegistrationsByTag(tag, 100, continuationToken);
    totalCount += registrations.length;
    continuationToken = registrations.continuationToken;
  } while (continuationToken);

  return totalCount;
}

// 先统计数量再发送通知
countTagRegistrations("yourTargetTag").then(count => {
  console.log(`目标用户数量:${count}`);
  // 这里执行发送通知的逻辑
  client.sendNotification("<通知内容>", { tags: ["yourTargetTag"] });
});

注意:这个数量是符合Tag条件的注册数,和实际成功推送数可能有差异(比如部分设备已注销或离线),如果需要准确的接收数,还是要结合日志来统计。

3. 实时统计:用Azure Functions处理推送日志

如果需要实时记录每个通知的接收用户,可以设置将Azure Monitor日志导出到Event Hub,然后用Azure Functions监听Event Hub,每收到一条成功推送的日志,就更新你的业务数据库(比如记录用户ID、推送时间等)。这种方式可以实现更精细的统计和追溯。

关键注意点

  • Azure Notification Hub的sendNotification方法回调只会返回推送请求是否被Hub接收,不会返回具体的推送结果明细,因为Hub是批量异步处理推送的。
  • 日志中的NotificationId可以在发送通知时通过设置notificationId参数来指定,这样方便后续关联查询。

内容的提问来源于stack exchange,提问作者Furqan Misarwala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:26:36