Webhook response is successful in Make but external tool (VAPI) says availability check failed

:bullseye: What is your goal?

My goal is to build a fully automated booking system using:

  • VAPI (AI voice agent)
  • Make.com (webhook automation)
  • Google Calendar
  • Google Sheets

The agent should:

  1. Check if a customer exists (via phone number).
  2. Create the customer if they do not exist.
  3. Check calendar availability.
  4. Book the appointment if the slot is free.
  5. Store booking data in Google Sheets.
  6. Allow canceling and rescheduling.

All tools are connected via separate Make webhook scenarios.

The problem is not that Make fails — it executes successfully.
The issue is that the external AI system behaves as if the webhook response is invalid, even though Make responds with valid JSON and status 200.

My goal is to understand why the webhook response is not being properly recognized by the external system.

:thinking: What is the problem & what have you tried?

Hi everyone,

I am building a booking system using VAPI (AI agent) + Make + Google Sheets + Google Calendar.

The architecture is:

  • VAPI calls a Make webhook (one scenario per tool).
  • Make runs successfully (green execution).
  • Make responds with JSON using “Respond to a Webhook”.
  • VAPI receives the response.

The problem:

Make runs successfully and the correct modules execute (green).
Google Calendar search works.
Google Sheets writes data correctly.
BUT the AI agent says:
“I cannot check availability” or “There was a problem.”

Even though Make clearly executed successfully.

Example: check_availability scenario

Make Respond settings:

  • Status: 200
  • Body type: Raw
  • Content-Type: application/json

Response body:
{ “frei”: true }

Search Events router:

  • Route FREE → Total bundles Numeric equal 0
  • Route BUSY → Total bundles Numeric greater than 0

Everything executes green in Make.

However, the external system behaves as if the webhook response is invalid.

Questions:

  1. Is there any known issue with Respond to Webhook not sending proper JSON?
  2. Can Make return JSON as string instead of real JSON?
  3. Is there anything special I must configure to ensure correct boolean output (true/false)?
  4. Could multiple Respond modules in different routes cause issues?

Additional info:

  • Scenario is active.
  • Webhook URL is correct.
  • Google Calendar and Sheets work correctly.
  • Problem only occurs when external tool interprets the response.

I would appreciate any debugging suggestions.

Thank you!

1 Like

Hello,

Welcome to the community!

Are you sure your response is valid JSON?
The JSON you pasted uses smart quotes.

It should look like this:

{"frei": true}

You can use, for example, this tool to validate your JSON: https://jsonlint.com

Have a nice day,
Michal

Hi Markus.

How have you defined the Tool in Vapi - as a Custom Tool or as an API Request?

If you’ve defined it as a Custom Tool, you need to respond with specific JSON that includes the tooCallId and the result.

To make that a little easier, you can use the Respond to a Tool Call module.

Your result parameter doesn’t have to be JSON. If simple text is easier, the Vapi assistant should understand it.

Hi @markusfur ,

We reviewed your case and understood the issue. From what you described, Make is executing successfully, so the problem is most likely related to the webhook response format expected by VAPI, not the Make scenario itself.

VAPI requires the webhook response to follow a specific JSON structure as mentioned in their documentation. If the response format does not match exactly, the assistant may behave as if the tool failed — even when Make returns status 200 and valid JSON.

The response should be structured like this:

{  "results": [    {      "toolCallId": "X",      "result": "Y"    }  ]}

Key Points

1. toolCallId (X)
This must be mapped from the incoming webhook payload sent by VAPI.
In Make, it usually looks like:

{{1.message.toolCalls[].id}}

If this ID is missing or incorrect, VAPI cannot match the response to the correct tool call, and the assistant may say things like “I cannot check availability” even though your scenario ran successfully.

2. result (Y)
This can contain any response you want to return to the assistant:

  • Simple text (e.g., "Available")
  • Boolean (true/false)
  • Or even a full JSON object (availability data, booking info, etc.)

How to Verify

You can confirm whether the response is being received correctly inside VAPI Call Logs:

  • Open the call → go to Messages tab
  • Scroll down and look for tool_call_result
  • There you can see:
    • The tool call sent by VAPI
    • The response returned from your webhook

This helps verify whether the data is properly mapped and returned.


Common Causes of This Issue

  • Returning { "frei": true } instead of the required results[] structure
  • Missing or incorrect toolCallId mapping
  • Returning plain JSON instead of the VAPI result wrapper
  • Multiple Respond modules returning different formats

You can refer to the official documentation here:


This should resolve the issue where VAPI behaves as if the webhook response failed even though Make executed successfully.

Best regards,
Msquare Automation
Platinum Partner of Make
@Msquare_Automation