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

如何高效计算Facebook Messenger的24小时会话窗口?

优化Facebook Messenger会话窗口检查方案

针对你需要批量验证用户PSID是否在24小时会话窗口内的需求,以下是几个更高效的解决方案,避免多次API调用触发速率限制:

1. 合并API调用,单次请求获取关键数据

利用Graph API的字段嵌套功能,将三次请求合并为一次,直接获取用户对话的最后消息时间:

GET https://graph.facebook.com/v16.0/<PAGE_ID>/conversations?platform=messenger&user_id=<USER_ID>&fields=messages.limit(1){created_time}
  • messages.limit(1)指定只返回最新的一条消息
  • {created_time}仅请求消息的创建时间字段,减少数据传输量
    这样一次请求就能拿到判断会话窗口所需的核心数据,无需额外调用对话ID和消息详情接口。

2. 批量处理多个PSID

使用Graph API的批量请求功能,单次请求可同时查询多个用户的会话状态,示例请求格式:

POST https://graph.facebook.com/v16.0
{
  "batch": [
    {
      "method": "GET",
      "relative_url": "<PAGE_ID>/conversations?platform=messenger&user_id=<PSID_1>&fields=messages.limit(1){created_time}"
    },
    {
      "method": "GET",
      "relative_url": "<PAGE_ID>/conversations?platform=messenger&user_id=<PSID_2>&fields=messages.limit(1){created_time}"
    }
    // 最多可添加25个请求
  ]
}

批量请求能大幅降低总请求次数,有效减少触发速率限制的概率,注意Facebook当前限制单次批量请求最多包含25个独立请求。

3. 本地缓存最后交互时间(最优方案)

通过Messenger Webhook实时记录用户的最后交互时间,彻底避免API查询:

  • 当用户发送消息、点击按钮或发起任何交互时,Webhook会收到对应的事件(如message、postback),事件中包含timestamp字段
  • 将该时间戳与用户PSID绑定,存储到本地数据库或缓存系统中
  • 后续发送更新前,直接查询本地存储的时间,判断是否在24小时窗口内
    这个方案完全不需要调用Graph API,是效率最高、最安全的做法。

4. 合规控制请求速率

如果必须依赖API查询,需严格遵守Facebook的速率限制规则:

  • 查阅对应API版本的速率阈值(v16.0中页面级请求通常为每小时600次批量请求或等价的单请求数量)
  • 实现请求队列,添加合理延迟,避免短时间内集中发送请求
  • 针对429 Too Many Requests错误,实现指数退避重试机制,避免反复触发限制

内容的提问来源于stack exchange,提问作者Stanlee Mok Khaei Leng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:37:09