Dialogflow富消息响应实现:Webhook返回列表结构求助
Hey there! I’ve dealt with this exact frustration before when working with Dialogflow webhooks—getting rich messages like lists to show up can feel tricky if you’re used to the basic speech/displayText structure. Let’s break down what you need to fix this.
First off, the simple speech/displayText response only handles plain text. For rich messages (lists, cards, carousels, etc.), you need to use the fulfillmentMessages field (for Dialogflow ES) or fulfillmentResponse.messages (for Dialogflow CX) instead. This is probably why the docs’ structure didn’t work for you—if you mixed up ES vs CX syntax, or didn’t nest the message correctly.
Let’s start with Dialogflow ES (the most common use case)
Here’s a working example of a webhook response that returns a list, plus a plain text fallback for platforms that don’t support rich messages:
{ "fulfillmentText": "Here's your requested list:", "fulfillmentMessages": [ // List message for Google Assistant (adjust platform for other integrations) { "listSelect": { "title": "My Task List", "items": [ { "info": { "key": "task1" }, "title": "Finish project draft", "description": "Due by Friday EOD" }, { "info": { "key": "task2" }, "title": "Schedule team sync", "description": "Weekly check-in on Wednesday" }, { "info": { "key": "task3" }, "title": "Review bug reports", "description": "Priority: High" } ] }, "platform": "ACTIONS_ON_GOOGLE" }, // Plain text fallback for platforms like Slack or generic web clients { "text": { "text": [ "1. Finish project draft (Due by Friday EOD)\n2. Schedule team sync (Weekly check-in on Wednesday)\n3. Review bug reports (Priority: High)" ] } } ] }
Key notes for ES:
fulfillmentTextacts as a universal fallback if the platform can’t render the rich message.- Always specify the
platformfield for rich messages—different integrations (Google Assistant, Facebook Messenger, Slack) have their own supported message types. For example, Slack usescardinstead oflistSelect. - Double-check the nesting: rich message types (like
listSelect) must be inside an object in thefulfillmentMessagesarray.
If you’re using Dialogflow CX
The structure is a bit different—you’ll use fulfillmentResponse.messages and message types like listCard:
{ "fulfillmentResponse": { "messages": [ { "listCard": { "title": "My Task List", "items": [ { "title": "Finish project draft", "description": "Due by Friday EOD", "eventHandler": { "webhookHandler": "handle_task1_click" } }, { "title": "Schedule team sync", "description": "Weekly check-in on Wednesday", "eventHandler": { "webhookHandler": "handle_task2_click" } } ] } } ] } }
Why your previous attempt might have failed:
- You used the wrong syntax for your Dialogflow version (ES vs CX).
- You didn’t nest the rich message inside
fulfillmentMessages/fulfillmentResponse.messages. - You forgot to specify the
platform(for ES), so Dialogflow didn’t know which integration to target. - Your webhook wasn’t returning a valid
application/jsonContent-Type header—this is easy to miss, but critical for Dialogflow to parse the response correctly.
Give this structure a try, and make sure to match it to your Dialogflow version. If it still doesn’t work, double-check the platform-specific message types (each integration has its own rules for rich content).
内容的提问来源于stack exchange,提问作者RoboticsNovice

