如何在Python中使用Twilio API发送含动态内容的WhatsApp目录模板消息?
如何在Python中使用Twilio API发送含动态内容的WhatsApp目录模板消息?
我之前也碰到过类似的困惑,Twilio关于目录模板动态内容的文档确实不够直观,不过其实核心就是用content_variables这个参数来传递你的动态产品数据,下面一步步帮你解决问题:
核心修改:添加content_variables参数
Twilio的Python SDK允许你通过content_variables参数传入动态内容,这个参数需要接收JSON格式的字符串,对应你模板中设置的“发送时指定”的字段。结合你的产品示例,修改后的代码如下:
import os from twilio.rest import Client import json # 你的Twilio账号信息 account_sid = "AC29e4f65xxxxxxxxxxxxxxxxxxxxxx" auth_token = "005d910f855463raggggggggregaer" client = Client(account_sid, auth_token) # 你要动态插入的产品数据 dynamic_products = { "products": [ {"name": "Burrata", "id": "5t84ih3l2a"}, {"name": "Grilled Salmon", "id": "g29jf8210c"}, {"name": "Lobster Roll", "id": "p84jls9q5v"}, {"name": "Roasted Pumpkin and Coconut Soup", "id": "k7n45x91uz"}, {"name": "Fillet Steak", "id": "q01mz8l7xy"}, {"name": "Steak and Lobster", "id": "f74xjp921v"}, {"name": "T-Bone", "id": "z18uwj53mc"}, {"name": "Farm Raised Chicken Breast", "id": "c23jv891yz"} ] } message = client.messages.create( content_sid="HXXXXXXXXX", # 你的目录模板Content SID to="whatsapp:+9193XXXXXXXXXXX", # 接收方号码 from_="whatsapp:+1xxxxxxxxxx", # Twilio发送方号码 # 将Python字典转为JSON字符串传入 content_variables=json.dumps(dynamic_products) ) print(f"消息已发送,SID: {message.sid}")
针对你问题的逐一解答:
如何指定动态内容?
就是通过content_variables参数传递,这个参数的值要匹配你在Twilio控制台创建模板时设置的动态字段名称。比如你模板里的动态字段是products,那你的JSON里就要有对应的products键。有没有特定的传递格式?
必须是JSON字符串(不是Python字典),所以要用json.dumps()把你的Python数据结构转成字符串。另外,键名要和模板中定义的动态变量名完全一致,否则Twilio无法正确解析。是否需要JSON编码?
是的,Twilio的API要求这个参数是JSON格式的字符串,直接传Python字典会报错,所以一定要用json.dumps()处理。示例和最佳实践?
- 确保产品的
id和你在Twilio Catalog中上传的商品ID完全匹配,否则消息里无法正确显示商品信息 - 可以添加简单的错误处理,比如捕获Twilio的API异常,避免程序崩溃:
from twilio.base.exceptions import TwilioRestException try: message = client.messages.create(...) print(f"消息已发送,SID: {message.sid}") except TwilioRestException as e: print(f"发送失败: {e.msg}") - 测试时可以先用少量产品数据,确认格式正确后再批量发送
- 如果你模板里有多个动态字段(比如除了products还有其他变量),只需要在JSON里添加对应的键值对即可
- 确保产品的
备注:内容来源于stack exchange,提问作者Harsh Jadhav




