Fiwa
09/25/2025, 6:06 PMVapi Support Bot
09/25/2025, 6:07 PMcall.id from the end-of-call report payload. Store processed call IDs (e.g., in a database or n8n's built-in storage) and skip execution if the same ID is received again.
js
if (processedCallIds.includes($json["message"]["call"]["id"])) {
return; // Already processed, skip
}
// ...process the event and add call.id to processedCallIds
This ensures each call is handled only once, regardless of how many times Vapi retries the webhook.
Reference: The webhook payload always includes a unique call ID you can use for this check ([documentation](https://docs.vapi.ai/server-url/events)).
Source:
- [Server events](https://docs.vapi.ai/server-url/events)Chiranjeet Mishra
09/26/2025, 10:42 PMngrok to expose your server over the internet. The ngrok URL will be your server URL for Vapi during development.
More information on developing locally with Vapi can be found [here](https://docs.vapi.ai/server-url/developing-locally).
3. **Testing with Vapi CLI**:
- Use the vapi listen command to forward webhook events to your local server. Remember to configure your Vapi webhook URLs to point to the tunnel URL provided by ngrok or any other tunneling service you use.
Detailed instructions for local webhook testing setup can be found [here](https://docs.vapi.ai/cli/webhook).
By following these steps, you should be able to effectively set up and test server URLs for Vapi.