WhatsApp Flows使用navigate时${data.xxx}数据插值失效问题
WhatsApp Flow预加载数据问题解答
问题背景
之前因data_exchange无法接收flow_action_payload(错误码131009),改用Cloud API的flow_action: "navigate"发送WhatsApp Flow预加载用户数据,请求示例如下:
{ "messaging_product": "whatsapp", "to": "5215659267516", "type": "interactive", "interactive": { "type": "flow", "action": { "name": "flow", "parameters": { "flow_message_version": "3", "flow_id": "26807425708853522", "flow_token": "test-123", "flow_cta": "Start", "mode": "published", "flow_action": "navigate", "flow_action_payload": { "screen": "WELCOME", "data": { "firstname": "Diego", "city": "Torreon" } } } } } }
WELCOME屏幕的Flow JSON配置:
{ "id": "WELCOME", "data": { "firstname": { "type": "string" }, "city": { "type": "string" } }, "layout": { "children": [ { "type": "Text", "text": "Hola ${data.firstname}," } ] } }
实际现象
- Flow可正常打开(无131009错误)
- 文本字面渲染为
Hola ${data.firstname},,而非预期的Hola Diego, - Flow处于已发布状态,非草稿
已尝试操作
- 在屏幕data schema中声明firstname
- 确认Payload已发送(Cloud API返回messages[0].id)
- 后续使用data_exchange的屏幕可正常接收端点数据
疑问解答
1. ${data.xxx}插值是否仅支持data_exchange响应,不支持navigate初始数据?
是的,${data.xxx}模板语法仅支持从data_exchange接口返回的数据进行插值渲染。通过flow_action: "navigate"传入的flow_action_payload.data虽然会进入Flow会话上下文,但初始屏幕的模板不会直接读取这部分数据,必须通过data_exchange接口返回对应字段,才能触发模板的插值渲染。
2. 初始flow_action_payload.data是否会自动持久化到后续data_exchange屏幕,还是需自行存储并在每次请求返回?
初始flow_action_payload.data会自动持久化在当前Flow会话的上下文中,后续所有data_exchange请求都会在request.body.context.data里携带这部分数据。你不需要自行存储,处理data_exchange请求时,直接读取该字段即可;若需要在前端渲染,只需在响应中返回对应数据即可。
解决建议
若要在WELCOME屏幕渲染预加载的用户数据,需将WELCOME屏幕配置为data_exchange类型。当收到Flow的data_exchange请求时,从context.data中取出firstname和city,并在响应中返回这些字段,这样模板插值就能正常渲染出Hola Diego,的效果。
内容的提问来源于stack exchange,提问作者DiegoMaury
相关产品推荐
相关产品推荐

