Dialogflow V2如何发送JSON数组?V1 Webhook返回JSON数组方法
在Dialogflow V1 Webhook中返回JSON数组的解决方案
嘿,我来帮你搞定这个问题!你提到的是在Dialogflow V1的Webhook fulfillment里传递JSON数组对吧?其实核心是要吃透V1的Webhook响应格式,我分两种常见场景给你拆解,再附上修正后的代码示例。
首先先纠正你代码里的一个小语法错误:你写的json对象里,"fulfillmentText":"something"后面少了个逗号,这会直接导致JSON解析失败,一定要注意这种细节哦!
场景1:返回多条消息组成的数组(给用户展示用)
Dialogflow V1的fulfillmentMessages字段本身就是一个数组,你可以在里面添加多个不同类型的消息(比如文本、卡片、列表等),Dialogflow会按顺序展示这些内容给用户。
比如你要返回多条文本,或者混合文本和卡片,代码可以这么写:
// 构造包含多消息数组的Webhook响应 const jsonResponse = { "fulfillmentText": "这是默认的语音回复文本", // 用于语音播报的文本 "fulfillmentMessages": [ // 第一条文本消息 { "text": { "text": ["你好,这是第一条回复"] } }, // 第二条文本消息 { "text": { "text": ["这是第二条带数组的回复"] } }, // 还可以加卡片消息,里面的buttons也是数组 { "card": { "title": "我的示例卡片", "subtitle": "卡片副标题", "buttons": [ { "text": "查看详情", "postback": "detail_page" }, { "text": "返回首页", "postback": "home_page" } ] } } ] }; // 将响应返回给Dialogflow res.json(jsonResponse);
场景2:传递自定义业务数组数据(给后续逻辑用)
如果你需要传递的是业务相关的数组(比如从服务器获取的商品列表、用户数据等),这些数据不需要直接展示给用户,而是给你的前端或其他服务做后续处理,那应该放在payload字段里——这是Dialogflow预留的自定义数据载体,完全不会影响用户看到的回复内容。
示例代码:
// 假设从你的服务器获取到的数组数据 const serverFetchedArray = ["商品A", "商品B", "商品C"]; const jsonResponse = { "fulfillmentText": "我找到了3个相关商品", // 给用户看的文本 "fulfillmentMessages": [ { "text": { "text": ["商品A、商品B、商品C"] } } ], // 把自定义数组放在payload里 "payload": { "productList": serverFetchedArray } }; res.json(jsonResponse);
之后你在客户端或者后续处理逻辑里,就可以从Dialogflow的响应中提取payload.productList来拿到这个数组啦。
另外还要提醒你:你代码里的const speech = res.result.fulfillment.speech;是客户端读取Dialogflow响应的代码,而Webhook的作用是返回响应给Dialogflow,这两个方向要区分开哦!
内容的提问来源于stack exchange,提问作者skyshine
相关产品推荐
相关产品推荐

