无法通过Facebook Graph API发送带换行的WhatsApp消息
解决WhatsApp模板消息动态多行文本换行报错问题
问题核心
通过Facebook Graph API发送WhatsApp模板消息时,动态文本参数中加入\n、\u000A等换行符会触发400错误,提示Param text cannot have new-line/tab characters or more than 4 consecutive spaces;使用%0A则仅显示字符无实际换行。此前该方法正常,近期失效,且因商品数量不固定无法在模板中预设换行结构。
原因分析
Meta近期更新了WhatsApp Business Platform的模板消息规则:模板消息的动态文本参数(template.components.parameters.text)不再允许包含换行符、制表符或连续4个以上空格,这是导致原有方法失效的直接原因。
可行解决方案
1. 改用会话消息(24小时窗口内适用)
如果用户在24小时内主动发起过对话,可放弃模板消息,直接发送自由格式的文本消息,该类型消息支持\n换行:
POST https://graph.facebook.com/v20.0/XXXXXXXXXXXXXXXX/messages Content-Type: application/json; charset=UTF-8 { "messaging_product": "whatsapp", "to": "XXXXXXXXXXX", "type": "text", "text": { "body": "Jon Doe\n2\n *1. Wrapped Plate, 8 in | 1 Pc*\nRate: 3.000\nQty: 8000\nAmount: 24000.00\n\n *2. Bottle Brush | 1 Pc*\nRate: 18.644\nQty: 11\nAmount: 242.00\n\nTotal: 24242.00\nAttn: John Lee\nContact: +91XXXXXXXXX" } }
注意:该方法仅在用户主动对话的24小时有效期内可用,超出窗口无法发送。
2. 改用媒体消息(无时间限制)
将订单详情生成图片、PDF等媒体文件,通过附件形式发送,完全不受文本格式限制,适合任意数量的商品排版:
POST https://graph.facebook.com/v20.0/XXXXXXXXXXXXXXXX/messages Content-Type: application/json; charset=UTF-8 { "messaging_product": "whatsapp", "to": "XXXXXXXXXXX", "type": "image", "image": { "link": "https://your-domain.com/order-XXXXXX-details.png", "caption": "您的订单详情如下:" } }
需要自行实现订单内容到媒体文件的生成逻辑,确保文件可公开访问。
3. 调整模板结构(仅固定行数场景适用)
若商品数量范围有限,可创建对应数量的模板,在模板body中预设换行结构,动态参数仅填充单行内容。但该方法灵活性差,不适用于商品数量完全不固定的场景。
内容的提问来源于stack exchange,提问作者Somanna




