调用WhatsApp Business API标记消息已读返回2500错误如何解决
错误原因
你遇到2500错误码、未知路径组件报错,是多重问题叠加导致的:
- 接口路径结构完全不符合API规范:标记消息已读的接口不支持把消息ID(wamid)作为路径参数拼在
/messages/后面,wamid需要放在请求体中传递,路径中需要传入的是你的WhatsApp商业账号对应的手机号ID(Phone Number ID)。 - 请求方法错误:该接口要求使用POST方法发起请求,你当前用的PUT方法不符合要求。
- 代码参数拼写错误:调用requests时传请求头的参数写为
header,requests库要求的参数名是headers(末尾带s),该问题会引发鉴权失败。 - 请求体缺少必填字段:WhatsApp Cloud API所有消息类接口都要求传
messaging_product字段,固定值为whatsapp,你当前的请求体没有这个字段。
修复方法
- 登录Meta开发者后台,进入对应WhatsApp应用的「API配置」板块,复制分配给你的Phone Number ID(注意这不是你的真实手机号,是系统生成的数字ID)。
- 调整请求URL格式,把Phone Number ID放到路径中,移除原本拼在URL里的wamid。
- 把请求方法从PUT改为POST。
- 修正requests的请求头参数名拼写,在请求体中补充必填的
messaging_product字段,同时把wamid放到message_id字段中。
修正后的可运行代码如下:
import requests import json # 替换为你自己的配置信息 PHONE_NUMBER_ID = "你的WhatsApp手机号ID" AUTH_TOKEN = "my-auth-token" TARGET_WAMID = "wamid.HBgMOTE4NzgwNDk1ODA0FQIAEhggQkU2OURGQUYyMzdCNDlBRkQ1QUI4RERBNDdENDBBOEIA" res = requests.post( url=f'https://graph.facebook.com/v13.0/{PHONE_NUMBER_ID}/messages', headers={ "Authorization": f"Bearer {AUTH_TOKEN}", "Content-Type": "application/json" }, data=json.dumps({ "messaging_product": "whatsapp", "status": "read", "message_id": TARGET_WAMID }) ) print(res.json())
调用成功后接口会返回{"success": true}的响应。
注意事项
- 只有用户主动发送给你的、处于24小时客服窗口期内的消息支持标记已读,超过窗口期的消息调用接口会返回权限类错误。
- 你当前使用的v13.0版本Graph API已经结束生命周期维护,如果后续遇到版本兼容问题,可以替换为当前官方稳定版版本号,接口传参规则保持不变。
- 确保你使用的Auth Token拥有对应WhatsApp账号的
whatsapp_business_messaging权限,否则也会返回鉴权失败错误。
内容的提问来源于stack exchange,提问作者Parth Panchal
相关产品推荐
相关产品推荐

