使用含变量的Twilio WhatsApp模板,如何获取消息文本并存储?
获取Twilio模板消息的最终文本方法
针对你用Twilio模板发送WhatsApp消息无法直接通过message.body获取文本的问题,有三种可行方案:
1. 预先生成填充后的消息文本
既然你已经掌握所有模板变量的值,直接按照模板的原始内容手动替换变量,生成最终消息文本后存储即可。这种方法无需额外API调用,简单高效。
示例代码:
# 替换为你实际的模板内容 template_content = "您好,{1},您的订单{2}已发货,预计{3}送达,联系电话{4},地址{5},备注{6}" # 替换变量生成最终文本 final_message = template_content.format( content_variables['var_a'], content_variables['var_b'], content_variables['var_c'], content_variables['vac_d'], content_variables['vac_e'], content_variables['vac_f'] ) # 将final_message存入你的数据表 # ... # 发送Twilio消息(原代码不变) message = client.messages.create( content_sid='AAAAAAA', from_='BBBBBBB', content_variables=json.dumps( {'1': content_variables['var_a'], '2': content_variables['var_b'], '3': content_variables['var_c'], '4': content_variables['vac_d'], '5': content_variables['vac_e'], '6': content_variables['vac_f']}), to=incoming_data['From'] )
2. 通过Twilio Content API获取模板内容再替换
如果不想硬编码模板内容,可调用Twilio的Content API获取对应content_sid的模板详情,拿到原始模板文本后再替换变量。这种方法无需维护模板副本,模板更新时自动同步。
示例代码:
# 获取指定content_sid的模板详情 content = client.content.v1.contents('AAAAAAA').fetch() # 提取模板的文本内容(根据Twilio返回的实际结构调整路径) template_text = content.versions[0].content.body.text # 替换变量生成最终文本 final_message = template_text.format( content_variables['var_a'], content_variables['var_b'], content_variables['var_c'], content_variables['vac_d'], content_variables['vac_e'], content_variables['vac_f'] ) # 存储final_message到数据表 # ... # 发送Twilio消息 message = client.messages.create( content_sid='AAAAAAA', from_='BBBBBBB', content_variables=json.dumps( {'1': content_variables['var_a'], '2': content_variables['var_b'], '3': content_variables['var_c'], '4': content_variables['vac_d'], '5': content_variables['vac_e'], '6': content_variables['vac_f']}), to=incoming_data['From'] )
3. 发送后重新获取消息详情尝试获取填充文本
部分场景下,Twilio会在消息发送后返回填充完整的文本内容。你可以发送后重新调用API获取消息详情,尝试读取body字段。
示例代码:
# 发送消息 message = client.messages.create( content_sid='AAAAAAA', from_='BBBBBBB', content_variables=json.dumps( {'1': content_variables['var_a'], '2': content_variables['var_b'], '3': content_variables['var_c'], '4': content_variables['vac_d'], '5': content_variables['vac_e'], '6': content_variables['vac_f']}), to=incoming_data['From'] ) # 重新获取消息详情 retrieved_message = client.messages(message.sid).fetch() final_message = retrieved_message.body # 如果获取到文本则存储,否则 fallback 到前两种方法 if final_message: # 存入数据表 pass else: # 使用预先生成或Content API的方式生成文本 pass
各方案对比
- 预先生成:操作简单,无额外开销,但需同步维护模板内容副本。
- Content API获取:无需维护模板,但多一次API调用,有请求成本。
- 发送后获取:无需维护模板,但依赖Twilio的返回逻辑,可靠性不如前两种。
内容的提问来源于stack exchange,提问作者Marcus Laszlo Stromeyer
相关产品推荐
相关产品推荐

