WhatsApp Flow payload模板变量未替换问题求助
问题:Flask应用中Datakinder表单变量未被实际值替换
我正在开发一个Flask应用,用于存储Datakinder家长客户的数据。目前已成功接收请求并解密消息,但触发on-click-action时,始终收到${form.parentname}而非用户输入的实际内容。点击“Siguiente(下一步)”按钮后,端点收到的数据为{'parentname': '${form.parentname}'},预期应为{'parentname': 'Alejandro'}。发送固定数据时能正常接收,但表单数据无法正确替换。
Footer代码如下:
{ "type": "Footer", "label": "Siguiente", "on-click-action": { "name": "data_exchange", "payload" : { "parentname":"${form.parentname}" } }, "enabled":true }
解决方案
- 改用Flask Jinja2模板语法:如果这段JSON定义在Flask模板文件中,Flask默认使用Jinja2引擎,变量占位符应为
{{ }}而非${}。将"parentname":"${form.parentname}"改为"parentname":"{{ form.parentname }}",确保模板渲染时自动替换为实际表单值。 - 前端动态获取表单值:如果这段JSON是前端JavaScript生成的,
${form.parentname}会被当作普通字符串处理。需要通过DOM API获取输入框的实际值,示例代码:// 假设输入框的id为parentname const parentName = document.getElementById('parentname').value; const footerConfig = { "type": "Footer", "label": "Siguiente", "on-click-action": { "name": "data_exchange", "payload" : { "parentname": parentName } }, "enabled":true }; - 确认表单字段名匹配:检查前端表单输入框的
name属性是否为parentname,只有字段名一致,模板或前端才能正确获取对应的值。 - 后端手动替换变量(若需):如果是后端直接拼接JSON字符串,需在返回给前端前手动替换占位符,示例Python代码:
# 假设form是请求中的表单对象 footer_json_str = '''{ "type": "Footer", "label": "Siguiente", "on-click-action": { "name": "data_exchange", "payload" : { "parentname":"${form.parentname}" } }, "enabled":true }''' footer_json_str = footer_json_str.replace("${form.parentname}", form.parentname.data)
内容的提问来源于stack exchange,提问作者Alejandro Mejia
相关产品推荐
相关产品推荐

