Ledger Collections Call

SkillAI & models

HITL outbound collections phone call from overdue JSON (E.164, integer minor units, region); CALL-E create plus poll; structured promise out; dry-run default; never posts to unsupported regions including YE.

Available today. Use it from your connected AI after setup.

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 Ledger Collections Call skill

What this skill tells your AI

The instructions your AI receives, as published by calle-ai/awesome-phone-call-agents in skills/ledger-collections-call/SKILL.md and read by ahel’s review.

Use this skill when a merchant (or an agent acting for one) has explicit authority to place one disclosed phone call about an overdue balance, and needs a structured promise back.

The directory name does not mean a money write. A CALL-E promised result is display-only. Payment stays a later human confirm (or another tool). Read references/overlap.md before treating this as a collections product: it is not kept.

This skill does not book a payment, post a ledger row, or run a campaign. A human reviews the result before any cash movement.

When To Use

  • One overdue contact the operator already authorized, with E.164, integer amountMinor, currency, locale, and region in JSON
  • Preview the CALL-E task and recipient result schema without credentials
  • Refuse Yemen and other unsupported regions before POST /v1/calls
  • Hand a structured promise to a human, a display-only card, or kept capture — not to a cashier

When Not To Use

  • Consumer FDCPA / statutory debt-collection engines
  • Collecting cards, CVV, bank passwords, or OTPs (PCI)
  • Automatic retry when the outcome is unknown, timeout, voicemail, or no_answer
  • Writing a ledger, invoice, or kept financial record from the structured result
  • CSV campaigns, call budgets, bank-feed reconcile (that is kept)
  • First-contact sales, scraped lists, or numbers the user did not authorize
  • Hidden schedulers, webhooks, or create_and_wait on the HTTP request
  • Inferring region from a leading +1

Required Inputs

JSON object:

FieldTypeNotes
contactIdUUID stringStable local id; used in the idempotency material
displayNamestringSpoken name
phoneE164stringE.164, authorized
amountMinorintegerOutstanding balance, smallest currency unit. No floats
currencystringISO code, e.g. USD
localeen or arTask language. Documented in English; do not embed other scripts in this folder
regionISO 3166-1 alpha-2Stated by the operator. Not inferred from the number
doNotCallbooleanIf true, refuse

Optional: storeName (default Store), promisedDate (YYYY-MM-DD or empty; authorization material only).

Preflight

  1. Confirm the user authorized this one collections call.
  2. Confirm E.164 and that doNotCall is false.
  3. Confirm amountMinor is a JSON integer (no remainder).
  4. Confirm region is supported and is not YE. See references/regions.md.
  5. Run scripts/preview.py before any CALL-E plan.

Dry-Run Preview

No CALL-E credentials. No network. scripts/preview.py never POSTs.

If the skill lives under docs/skills/ (originating product repo):

python3 docs/skills/ledger-collections-call/scripts/preview.py \
  --request docs/skills/ledger-collections-call/assets/sample-overdue.json

If the skill lives under skills/ (this awesome-list layout):

python3 skills/ledger-collections-call/scripts/preview.py \
  --request skills/ledger-collections-call/assets/sample-overdue.json

Preview prints a masked phone, the CALL-E task, the result schema, and an idempotency key. It exits 0 with status: not_called. --live is rejected: live execute is not implemented in this skill.

CALL-E Goal Template

Device-owned English (locale en). Shame language and fake legal threats are forbidden. Disclose that the caller is the store's assistant. Ask for a promise date and amount. Do not collect card numbers.

Call {displayName} on behalf of {storeName}. Identify yourself as the store's assistant, not a government collector. Their outstanding balance is {amountLine}. Ask whether they can promise a payment date and amount. Be brief, polite, and stop if they refuse. Return structured fields only: promised / refused / voicemail / no_answer / wrong_number / callback_requested, integer minor-unit amount if they state one, ISO date if they state one.

amountLine is formatted from integer amountMinor plus currency (for example USD 15.00 for 1500 USD). Do not re-convert through floating point.

For locale ar, use the same constraints in Arabic at execute time. This folder stays English-only.

Structured Result

See references/result-schema.md. Required outcome enum: promised, refused, voicemail, no_answer, wrong_number, callback_requested. Optional integer promised_amount_minor, promised_currency, promised_date (YYYY-MM-DD).

A promised result is not a payment. voicemail, no_answer, and unknown all need a human. Do not redial unknown.

Live Planning

preview.py does not dial. Live requires a host that already has CALL-E authentication, a human confirm, and a second explicit gate (for example --live plus --confirm PLACE-REAL-CALLS on that host). This skill documents the gates; it does not implement POST /v1/calls.

If you use the CALL-E CLI after review:

calle call plan --to-phone <E164_PHONE> --goal "<reviewed goal text>" --timezone America/New_York --language English --region US

Do not run calle call start unless the user separately confirms. Do not post unsupported regions including YE.

Cancellation And Idempotency

Idempotency key (hex SHA-256), not uuid4:

sha256("{contactId}|{amountMinor}|{currency}|{promisedDate}|{utcDate}")

utcDate is YYYY-MM-DD in UTC for the authorization day. promisedDate may be empty.

If the user cancels before dial, do not execute. If a result is ambiguous, route to a human rather than calling again with a new key.

Safety Notes

Read references/safety.md, references/examples.md, references/regions.md, references/result-schema.md, and references/overlap.md before live planning.

Signals

GitHub stars
104
Forks
527
Last commit
Sep 2026

ahel review

  • K6low
    bundled executables the agent is told to run

Automated review, not a security audit. Ruleset v1+k2.

Advanced
Item type
skill
Key
ledger-collections-call
Source
github.com/calle-ai/awesome-phone-call-agents