COD Order Confirmation Call
SkillAI & modelsPrepare one authorized cash-on-delivery order confirmation call. Compiles a CALL-E brief and advisory result schema from order rows, leaving result validation and status changes to the calling system or a human. Dry-run preview by default.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the COD Order Confirmation Call skill
What this skill tells your AI
The instructions your AI receives, as published by calle-ai/awesome-phone-call-agents in skills/cod-order-confirmation-call/SKILL.md and read by ahel’s review.
Use this skill when a shop, marketplace or chat-commerce system has explicit authority to place one disclosed phone call to confirm a cash-on-delivery order the customer already placed. The call reads back the items and total exactly as recorded, confirms the delivery address, records requested changes, and returns a structured disposition. It never invents items, prices or delivery promises.
This skill does not execute calls, validate returned results or change order status itself. The compiler prepares a task and schema; the host must review the advisory result before applying its own rules. The external reference uses heuristic confirmation and cancellation rules, not a guarantee that every ambiguous answer reaches a human.
When To Use
- Confirm a COD order that arrived through WhatsApp, Instagram, Messenger, a web shop or a marketplace
- Reduce fake, duplicate or forgotten COD orders before goods are prepared and dispatched
- Capture an address correction or an item change the customer asks for
- Produce an evidence-backed disposition for the operations team
When Not To Use
- First-contact sales, upselling or unsolicited marketing
- Collecting card details, ID numbers, or any payment on the call
- Medical, legal, financial, collections or political calls
- Calling a number that did not come from the order record
- Hidden retries or recurring reminder schedules
Required Inputs
order_ref: short human reference read on the callbusiness_display_name: name disclosed on the callcustomer_name(optional) andto_phone_e164(E.164, from the order record)items[]:{ name, variant?, quantity, unit_price }from the order rows, not from a chat transcriptcurrency,total, optionaldelivery_feedelivery_address(optional — if absent the caller collects it)delivery_policy(optional short text the caller may quote)language(optional),timezone(IANA)consent: must be true;do_not_call: must be false
Preflight
- Confirm the operator or the calling system authorized this one confirmation call.
- Confirm
to_phone_e164came from the order record and is in a CALL-E supported country. - Refuse if
do_not_callis true,consentis not true, or the order has no items. - Run the local preview before any CALL-E plan.
Dry-Run Preview
From the repository root (no CALL-E credentials, no network):
python3 skills/cod-order-confirmation-call/scripts/build_task.py skills/cod-order-confirmation-call/assets/sample-order.json
Prints display copies of the compiled CALL-E task, result_schema, and idempotency key with phone-like text masked throughout. It does not dial. The internal build(order) result retains the private task for a separately authorized host integration; do not treat masked preview output as an approved live payload.
CALL-E Goal Template
You are calling on behalf of {business_display_name} to confirm a cash-on-delivery order
before it is prepared and dispatched. Disclose that you are an AI assistant.
Customer: {customer_name}. Order reference {order_ref}, placed {placed_at_friendly}.
Items: {quantity} x {item} at {unit_price}; ...
Delivery fee: {delivery_fee}. Total to pay in cash on delivery: {total}.
Delivery address on file: {delivery_address} (or: No delivery address is on file — ask for it).
Delivery policy: {delivery_policy}.
Goal: 1) greet and say you are calling from the shop to confirm their order; 2) read back the
items and the total; 3) confirm the delivery address or collect it; 4) ask if they want any
change and record it precisely; 5) if they no longer want the order, accept politely.
Rules: never invent items, prices, discounts or delivery times not in this brief. If asked
something you do not know, say a team member will follow up. Keep the call under two minutes.
On voicemail, leave a short message saying who you are and end the call.
Structured Result
{
"disposition": "confirmed | changed | cancelled | voicemail | no_answer | wrong_number | needs_human",
"confirmed": "yes | no | unknown",
"address_correct": "yes | no | unknown",
"delivery_address": "as stated by the customer, or empty",
"requested_changes": "exact changes requested, or empty",
"preferred_delivery_window": "stated preference, or empty",
"customer_notes": "anything else the team should know"
}
Only disposition = confirmed and confirmed = yes with high completion confidence should flip an order to confirmed. changed, voicemail, no_answer, wrong_number, needs_human and any low-confidence result need a human. cancelled may cancel the order only if the calling system's rules allow it.
Live Planning And Execution
The following SDK call executes a real call; it is not a plan. Run it only after final per-call approval of the reviewed task and authorized E.164 destination, and CALL-E authentication:
import { CalleClient } from "@call-e/calle";
const client = new CalleClient({ apiKey: process.env.CALLE_API_KEY! });
const call = await client.calls.create(
{ task, recipients: [{ phones: ["<E164_PHONE>"], region: "<REGION>" }], resultSchema, recipientResultSchema: resultSchema, metadata: { order_ref } },
{ idempotencyKey: `cod-confirm:${order_ref}:1` },
);
Planning via the CALL-E CLI is also valid and is not execution:
calle call plan --to-phone <E164_PHONE> --goal "<reviewed task text>" --timezone Asia/Beirut --language English --region GB
For the CLI, do not execute the resulting plan unless the operator or calling system separately confirms this call. Creating a plan alone is not that approval.
Cancellation And Idempotency
Idempotency key: cod-confirm:{order_ref}:{attempt}. Persist it before the first request and reuse it on retries. One call per order per attempt; never retry automatically on unknown, voicemail or no answer — route to a human.
Before submission, cancel by discarding the preview or plan. After submission, stopping this script or closing a page does not recall an accepted call. Use supported provider controls and treat cancellation as unconfirmed until the provider confirms it. Reconcile an unknown outcome before authorizing another attempt; a stable key is not a crash-proof or permanent duplicate-prevention guarantee.
Reference Implementation
FrontDesk Phone Follow-Through (see docs/community-apps/frontdesk-phone-follow-through.md) runs this skill inside a multi-tenant WhatsApp AI front desk: a Confirm by phone button on the Orders page and an optional auto-confirm timer, with the result written back to the order and posted as a note in the customer's inbox thread.
Safety Notes
Read references/safety.md and references/examples.md before live planning.
Signals
- GitHub stars
- 104
- Forks
- 527
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
cod-order-confirmation-call- Source
- github.com/calle-ai/awesome-phone-call-agents