A campaign has two kinds of retry. Your retry attempts (retry_attempts, retry_delay_sec) cover calls that rang but were not answered, or were busy. Network retries are automatic: when the network refuses a call before it can ring, Edesy calls the contact again later without using one of your attempts. This page covers both, the auto pause that protects your list during an outage, the test call, playing your own audio file, and running a finished campaign again.
Network retries#
| Item | Behaviour |
|---|---|
| Trigger | The network refuses the call within seconds, before it rings, or answers that it is over capacity |
| Schedule | About 1, 3, 10, 20 and 30 minutes after each refusal, with a small random spread |
| Limit | 5 network retries per contact, then the contact ends as failed |
Your retry_attempts |
Not used. A refused call gives the attempt back |
| Contact status while waiting | retrying, with the next retry time in the contact's error text |
| Cost | Free. A refused call never connects, so nothing is billed |
A normal outcome such as no answer, busy or a rejected call is not a network failure. Those use your retry_attempts, spaced retry_delay_sec apart.
Auto pause and auto resume#
If 10 calls in a row are refused, the campaign stops dialing so it does not fail the whole list:
- If the campaign has a working backup caller ID, calls switch to it and the campaign keeps running.
- Otherwise the campaign pauses with a network pause reason.
- After 5 minutes it resumes by itself and tries again. Contacts keep their network-retry count, so a network that is still down ends them as
failedinstead of retrying forever.
Other pauses behave differently:
| Pause reason | Resumes automatically? |
|---|---|
| Network refusing calls | Yes, after 5 minutes |
| Calling window closed | Yes, when the window opens |
| Wallet balance ran out | No. Top up, then POST/v1/campaigns/{id}/resume |
| You paused it | No. POST/v1/campaigns/{id}/resume |
Test call#
curl -X POST https://voice-api.edesy.in/v1/campaigns/{id}/test-call \
-H "Authorization: Bearer $EDESY_KEY" \
-H "Content-Type: application/json" \
-d '{ "phone_number": "+9198XXXXXXXX" }'
- One call from the campaign's caller ID that plays exactly what a contact will hear. In the portal this is the Call me button on the review step.
- It does not touch the campaign's contacts, results or concurrency.
- It is billed like any other outbound call.
- Limits: one test call per campaign at a time (a double click is ignored), and 20 test calls an hour per workspace. Over the limit returns
429. - Agent-dialer campaigns have no message to play, so they have no test call. An empty wallet returns
402.
Play your own audio file#
Set audio_type: "audio" and upload a WAV or MP3 with POST/v1/campaigns/{id}/audio (see Create a Campaign). A recording has no text-to-speech charge: you pay only the Rs 0.70 per minute campaign rate.
For a single call rather than a campaign, POST/v1/calls accepts audio_url, an https:// link to an MP3 or WAV file. The file is played when the callee answers, then the call ends, with no text-to-speech charge. audio_url must be https://; plain http:// links are rejected. It cannot be combined with text, url, voiceml, stream_url or application_id.
curl -X POST https://voice-api.edesy.in/v1/calls \
-H "Authorization: Bearer $EDESY_KEY" \
-H "Content-Type: application/json" \
-d '{ "from": "+9180XXXXXXXX", "to": "+9198XXXXXXXX", "audio_url": "https://cdn.example.com/notice.mp3" }'
Run again#
curl -X POST https://voice-api.edesy.in/v1/campaigns/{id}/duplicate \
-H "Authorization: Bearer $EDESY_KEY" \
-H "Content-Type: application/json" \
-d '{ "audience": "unreached" }'
audience |
Contacts in the copy |
|---|---|
all (default) |
Every contact again |
unreached |
Only contacts not reached last time: unanswered, busy, failed or never dialed |
none |
No contacts. Upload a new list to the copy |
- The copy is a new campaign in
createdstatus, named with a(rerun)suffix. It keeps the settings and the message, so you don't upload the audio again. Start it with POST/v1/campaigns/{id}/start. - Contacts are screened against your DNC list again, so numbers added since the first run are suppressed.
- The original keeps its own results and export.
- The backup caller ID is carried over only if it is still in your workspace. If the main caller ID has been released, the request fails with
400. - Payment-reminder campaigns cannot be run again yet.
FAQ#
Do network retries use up my retry attempts?#
No. Network retries are counted separately, up to 5 per contact. retry_attempts is only for unanswered and busy calls.
Why did my campaign pause by itself?#
10 calls in a row were refused and there was no working backup caller ID. It resumes after 5 minutes.
Is a refused call billed?#
No. Only answered calls are billed.
Does the test call change my campaign's numbers?#
No. It is not a contact, so it never appears in the campaign's stats or results CSV.
Can I run a campaign again with a different message?#
Run again keeps the message. To change it, create a new campaign.