COD Order Confirmation

How Call Outcomes Write Back to Your Store

Every COD confirmation call ends in one outcome. Here is each outcome, what Edesy does on your store for it, and how you control the exact request we send.

The short answer

When a COD confirmation call ends, Edesy decides the outcome, such as confirmed, cancelled, no input or unreachable, and runs the store actions you chose for it: add a tag, add a note, cancel the order or record no answer. Stores on a generic webhook get a signed JSON result at their action URL instead.

From key press to your store

  1. Step 1 of 5: The customer presses a key

    Press 1 to confirm or 2 to cancel. Confirm and cancel are sent to your store during the call itself.

  2. Step 2 of 5: The call settles on an outcome

    When the call, or the last attempt, ends, the order gets one outcome: confirmed, cancelled, no input, unreachable, expired, update failed, or confirmed or cancelled elsewhere.

  3. Step 3 of 5: Your outcome actions run

    For each outcome you choose what happens on the store: add a tag, add a note, cancel the order, record no answer, or nothing.

  4. Step 4 of 5: The store is updated

    Connected platforms are updated through their API with the request shown in the action-request editor. Generic webhook stores receive a signed JSON result at their action URL and update the order themselves.

  5. Step 5 of 5: Everything is on the order timeline

    The Orders view shows the event received, each call attempt, the key pressed, the store's response and the final outcome. You can retry or replay from there.

Outcomes reference

Every outcome a COD order can end with, and what happens by default

OutcomeWhen it happensDefault result
ConfirmedCustomer pressed confirm and the store accepted itOrder confirmed on the store (tag, note or status, by platform)
CancelledCustomer pressed cancel and the store cancelled the orderOrder cancelled
No inputCustomer answered but pressed no key, after the last attemptTagged with your no-input label
UnreachableNo answer, busy or failed on every attemptTagged with your unreachable label
ExpiredThe give-up time passed before the customer was reachedClosed, no more calls
Update failedCustomer chose, but the store update failedUpdate retried in the background
Confirmed elsewhereOrder already confirmed on the store before the callNot called
Cancelled elsewhereOrder already cancelled on the storeNot called

Outcome actions

What you can do on the store for each outcome

Add tag

Add a tag or status text such as COD-UNREACHABLE. Use {labels.unreachable}, {labels.no_input} and the other label tokens to reuse the labels you set once.

Add note

Add an order note, for example "Not reachable after {job.attempts} calls", so your team sees why an order was held.

Cancel order

Cancel the order on the store. Because this cancels real orders, it needs an explicit opt-in.

Record no answer

Write a no-answer result to the store, on platforms that support it.

Only what your store supports

Each store integration declares what it can do. Actions a platform can't perform are hidden, so a rule never asks for a write the store can't take.

Failed updates are retried

If the store times out or returns an error, the outcome shows as Update failed and the same request is retried in the background. If updates keep failing, calls pause so answers don't pile up unsaved.

Generic webhook stores: the signed result

If your store connects through a generic webhook (see the custom store API), Edesy does not log in to your store. Instead we POST a JSON result to your action URL and your system updates the order:

{
  "action": "confirm",
  "order_id": "10452",
  "order_name": "#10452",
  "call_sid": "c4b1e2d0-...",
  "at": "2026-10-12T11:42:05+05:30"
}
  • action is confirm or cancel, and, depending on your outcome actions, tag or note.
  • The request carries X-Edesy-Timestamp and X-Edesy-Signature: sha256=..., signed with your account's IVR signing secret (separate from the store webhook secret). Verify it before you change the order.

The action-request editor

For every store integration, the editor shows exactly what we send for each action (confirm, cancel, tag and note) and lets you change it:

You can set Details
Method and URL The HTTP method and the store endpoint
Body With placeholders such as {order.external_id}, filled per call
Extra headers Your own headers. Authorization is added for you and can't be set here
Success status codes Which store responses count as success
Preview Filled with your latest order, or an example order if you have none yet
Send test Sends the real request for an order number you type, so a test cancel really cancels
Reset to default Back to the integration's standard request
Revision history When each action's request was last changed

Changes apply to every call rule that uses the integration. Your store API key is only ever sent to the store's own API.

Outcome Write-Back: FAQ

Tell us about your calls

Share your use case and volume. We reply within one working day with a setup plan and pricing.

Set up COD confirmation calls

Connect your store, get a number and create your first call rule at orders.edesy.in. Calls are billed per minute from your Edesy wallet.