开发模式应用中WhatsApp Business API永久令牌无法使用问题咨询
WhatsApp Business API永久令牌报错400问题排查
开发模式下的应用支持永久令牌,你的问题并非模式限制导致,大概率是永久令牌的权限、关联配置或生成流程有误,以下是具体排查步骤:
1. 核对永久令牌的权限与有效性
- 临时令牌生成时会即时继承当前用户的权限,而永久令牌需要确保生成时明确勾选了
whatsapp_business_messaging和whatsapp_business_management权限,且令牌与你的WhatsApp Business账户、应用处于绑定状态。 - 可通过Meta Graph API调试工具验证:调用
/debug_token端点,传入永久令牌,确认is_valid为true,且权限列表包含上述两个必填权限。
2. 验证Phone Number ID的正确性
- 错误提示中的ID大概率是代码里的
phone_number_id,需确认该ID属于当前应用绑定的WhatsApp Business账户,且号码状态为活跃。 - 用可用的临时令牌调用
/{business_account_id}/phone_numbers端点,获取账户下所有有效号码的ID,与代码中使用的phone_number_id对比是否一致。
3. 检查永久令牌的生成主体
- 永久令牌必须通过系统用户生成,而非普通个人管理员账号的长期令牌(个人账号生成的所谓"永久"令牌可能因账号权限变更、会话失效等问题报错)。
- 正确流程:在Meta商务管理平台创建系统用户,分配其WhatsApp Business账户和应用的全部管理权限,再通过该系统用户生成永久令牌。
4. 代码层面的细节排查
- 确认代码中
access_token变量确实赋值为永久令牌,未与临时令牌混淆(可打印令牌前几位对比差异,注意不要泄露完整令牌)。 - 检查
phone_number_id拼接是否正确,确保URL中没有多余字符或格式错误。 - 代码小优化:将
requests.post中的data=json.dumps(text_data)替换为json=text_data,requests会自动处理Content-Type头和JSON序列化,避免手动序列化可能出现的格式问题:
recipient_phone_number = rec.owner_id.partner_id.mobile url = f"https://graph.facebook.com/v15.0/{phone_number_id}/messages" headers = { "Authorization": f"Bearer {access_token}", } # Code for sending text message in whatsapp. text_data = { 'messaging_product': 'whatsapp', "recipient_type": "individual", 'to': recipient_phone_number, 'type': 'text', "text": { "preview_url": False, "body": "Dear %s, this message is to remind that document %s will expire on %s." % (rec.owner_id.name, rec.name, rec.expiry_date) } } text_response = requests.post( url, headers=headers, json=text_data # 替换为json参数,简化序列化流程 )
内容的提问来源于stack exchange,提问作者Rob Kuttan
相关产品推荐
相关产品推荐

