You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动