如何通过WhatsApp API长期定时发送多格式文档给用户?
无需用户每日回复长期发送多格式文档的解决方案
核心结论
可以实现无需用户每日回复,长期向指定用户发送PDF、PPTX、CSV、Excel等多格式文档,但必须通过Meta官方的主动消息权限申请+自定义模板扩展来实现,不能依赖临时的24小时对话窗口。
问题根源
- 当前使用的是用户发起对话后的24小时"会话窗口"权限,窗口过期后,未经用户回复无法主动发送非模板消息
- 普通预定义模板确实仅支持PDF,但自定义模板可申请扩展支持更多文档格式
具体实现步骤
申请主动消息(Proactive Messaging)权限
- 这是Meta针对合法业务场景(如每日报表推送、服务通知)开放的长期主动发送权限,无需用户每日触发对话
- 在Meta Business Manager中提交权限申请,明确说明业务场景(比如"每日向客户发送业务报表"),审核通过后即可获得长期主动发送权限
创建支持多格式文档的自定义模板
- 进入WhatsApp Business Platform的模板管理后台,创建文档类型的自定义模板
- 模板文案需符合WhatsApp合规要求(必须包含固定说明性文字,不能全为变量),例如:
今日业务报表已生成,请查收附件 - 在模板的组件设置中,指定允许的文档格式:PDF、PPTX、CSV、XLS/XLSX等(Meta支持绝大多数常见办公文档格式)
- 提交模板审核,通过后即可使用
调整代码适配模板消息发送
将原有的普通消息请求改为模板消息请求,示例代码如下:import requests import json # 替换为你的实际参数 WA_BUSINESS_ID = "your_business_id" ACCESS_TOKEN = "your_access_token" TEMPLATE_NAME = "daily_report_template" MEDIA_ID = "your_uploaded_media_id" USER_PHONE = "target_user_phone" url = f"https://graph.facebook.com/v17.0/{WA_BUSINESS_ID}/messages" payload = json.dumps({ "messaging_product": "whatsapp", "to": USER_PHONE, "type": "template", "template": { "name": TEMPLATE_NAME, "language": {"code": "zh_CN"}, # 替换为目标用户的语言代码 "components": [ { "type": "document", "parameters": [ { "type": "document", "document": {"id": MEDIA_ID, "filename": "今日报表.xlsx"} } ] } ] } }) headers = { 'Authorization': f'Bearer {ACCESS_TOKEN}', 'Content-Type': 'application/json' } response = requests.post(url, headers=headers, data=payload) print(response.json())
注意事项
- 权限和模板审核需符合WhatsApp的合规政策,禁止用于垃圾营销或违规内容
- 文档需提前上传到Meta媒体库获取
media_id,确保格式与模板指定的类型一致 - 模板文案需清晰说明消息用途,避免审核被拒
内容的提问来源于stack exchange,提问作者Marvin
相关产品推荐
相关产品推荐

