invoice.due

The overdue-invoice chase, done politely. The agent knows the amount, due date, days overdue, and last payment before dialing — so "I already paid last week" is handled with grace, not an argument.

OutcomeMeaningAuto-action
payment_promisedA payment date was agreed (+ promise_date)write.mark_promise
claims_already_paidCustomer says it's paidescalate.billing_review
disputedCharge contestedescalate.billing_review
callback_requestedWants a humanescalate.human_callback
refusedDeclines without a date— (never redialed)
no_answerUnreachableRedial up to 2×

account.warning

An urgent-but-calm security notice. The agent never asks for passwords, PINs, or codes — and says so in its instructions. If the customer doesn't recognize the activity, the agent advises that a reset link was emailed and offers a security-team callback.

OutcomeMeaningAuto-action
acknowledgedNotice received
activity_confirmed_legitimate"That was me"
needs_humanWorried; wants the security teamescalate.human_callback
no_answerUnreachableRedial up to 2×

Payload: {"reason": "login from a new country", "detail": "A sign-in from Singapore was detected."}

promo.offer

A loyalty offer delivered by voice — warmer than SMS, and the agent answers questions in real time. Under a minute if they're not interested; a hard rule forbids pushing twice.

OutcomeMeaningAuto-action
acceptedTook the offer
declinedSaid no— (never redialed)
callback_requestedWants to decide later with a humanescalate.human_callback
no_answerUnreachableRedial up to 2×

Payload: {"offer": "20% off your next invoice", "expires": "end of this week"}

delivery.window

Confirm a delivery window — or collect one preferred alternative. The agent repeats the window back on confirmation and never leaves order details in a voicemail.

OutcomeMeaningNotes
confirmedAccepts the proposed windowWindow repeated back
reschedule_requestedGives an alternative (+ preferred_window)One alternative only
callback_requestedWants a human
no_answerUnreachableRedial up to 2×

Payload: {"window": "tomorrow, 2:00–4:00 PM", "order_ref": "ORD-8472"}

appointment.reminder

A warm reminder: confirm, reschedule, or cancel. The agent offers a callback for available times — it never invents times itself.

OutcomeMeaning
confirmedWill attend
reschedule_requestedWants a new time
cancelledCancels — accepted graciously
no_answerUnreachable — redial up to 2×

Payload: {"what": "annual check-up", "when": "tomorrow at 10:00 AM"}

payment.failed

The declined-card notice done right: matter-of-fact, never accusatory, and card details are never discussed on the call — the payment link goes to the email on file.

OutcomeMeaning
will_update_paymentWill use the emailed link
already_updatedSays it's fixed — account re-checked automatically
callback_requestedFrustrated — billing callback offered
no_answerUnreachable — redial up to 2×

Payload: {"amount": "the monthly charge", "reason": "the card was declined"}

subscription.expiring

One clear renewal offer with a loyalty discount. The offer is mentioned once; if they still decline, the call ends warmly — never a second push.

OutcomeMeaning
renewedAccepts the renewal — details emailed
declinedDeclines — terminal, never redialed
callback_requestedWants to talk to the team
no_answerUnreachable — redial up to 2×

Payload: {"when": "in 7 days", "offer": "a 10% loyalty discount on renewal"}

feedback.request

A two-minute feedback call: one 1–5 satisfaction rating and one open comment. Unhappy customers get a sincere apology and a callback offer.

OutcomeMeaning
providedGave feedback (+ rating 1-5, comment)
busy_callback_requestedBusy — asked to call back
no_answerUnreachable — redial up to 2×

Payload: {"topic": "their recent experience with the service"}

Adding your own

A blueprint lives in internal/events/router.go and has exactly two required parts:

"delivery.window": {
    Compose: func(c, e, s) (string, error) {
        // build the call task with prefetched business data
    },
    ResultSchema: map[string]any{
        // JSON Schema — CALL-E extracts this from call evidence
    },
},

Intake, routing, scheduling, retries, windows, persistence, outcome actions, dashboard — all of it is generic. The blueprint is the only project-specific code.

Goals API: an event type can instead pin to a published, versioned CALL-E Goal (GoalID + Variables) for stricter governance. See Architecture → Goals.