如何通过WhatsApp Cloud API区分实时位置与标记位置?
区分WhatsApp Cloud API中的实时位置与地图选点
核心结论
WhatsApp Cloud API的Webhook负载没有专门标识「实时位置」的字段,但可以通过实时位置的「持续推送特性」来可靠区分,这是官方隐含的验证逻辑。
问题分析
你提到的通过name/address字段缺失判断实时位置的方法存在漏洞:当用户选择地图上无名称的通用点(比如空旷区域)时,负载同样不会包含这两个字段,无法和真实实时位置区分。
可靠验证方案
1. 利用实时位置的持续推送特性
当用户点击「发送实时位置」按钮时,WhatsApp会根据用户选择的时长(15分钟/1小时/8小时)持续向Webhook推送该用户的位置更新:
- 每次推送的
location对象仅包含latitude和longitude,且经纬度会随用户移动产生有效变化 - 同一用户的实时位置消息会在设定时长内多次推送,时间戳连续递增
而地图选点是一次性推送,不会有后续的位置更新。
实现逻辑:
- 记录用户的会话ID(
from字段)和首次收到位置消息的时间戳 - 若在预设时长内(比如10分钟)收到同一用户的多条
location类型消息,且经纬度存在非误差范围内的变化,即可判定为真实实时位置
2. 辅助验证:结合消息发送频率
- 实时位置的推送频率通常为1-5分钟一次,而地图选点只会发送一次
- 可通过设定时间窗口(如5分钟)内的消息数量,进一步强化验证逻辑
负载示例回顾
- 地图选点(含POI信息):
"location": { "address": "<LOCATION_ADDRESS>", "latitude": <LOCATION_LATITUDE>, "longitude": <LOCATION_LONGITUDE>, "name": "<LOCATION_NAME>" }
- 地图选点(无POI信息)/首次实时位置:
"location": { "latitude": <LOCATION_LATITUDE>, "longitude": <LOCATION_LONGITUDE> }
- 实时位置后续更新:
"location": { "latitude": <UPDATED_LATITUDE>, "longitude": <UPDATED_LONGITUDE> }
内容的提问来源于stack exchange,提问作者Luke Kroon
相关产品推荐
相关产品推荐

