Don't know if this will actually solve your problem, but I recently had a similar doubt to yours and this cleared it up for me.
From Google's Documentation for CX Webhooks, the response message for a webhook call is structured with a fulfillment_response field: this contains what the bot will say to the user if the webhook call is successful.
So, to answer your question what should happen is this:
- The user enters a city name, e.g. Atlanta
- The bot extracts the city name with a parameter and stores it, for example, as the $intent.params.city_name
- The bot also has "Enable Webhook for this page" enabled, and thus makes a Webhook request in JSON with a field called IntentInfo which contains a parameters field
- You call your API o do your computation or whatever in your script
- You build a WebhookResponse compliant with their format which contains a fulfillment_response field with a list of all ZIP codes for Atlanta in a format like such: "Here we are, these are $intent.params.city_name's ZIP codes: [your computed zipcodes]". For reference, there is an API package for most programming languages which can help you with that.
- The bot will receive the JSON and directly respond to the user with what is inside the fulfillment_response field
Hope this solved your doubts!