# Following up a quotation

Connect chases a quotation the way a disciplined salesperson does: it references that a quotation exists, asks what would help the decision, records what comes back against the opportunity, and hands any question about the number itself to a person. `safe_sales` is the rule — a price, an SLA or a warranty Knowledge cannot support is refused, not improvised.

- **Status:** Available
- **Audience:** both
- **Channels:** email, phone
- **In the app:** #/pipeline, #/follow-ups, #/needs-you
- **Last verified:** 2026-09-10
- **Canonical:** https://connectbyjbrh.com/docs/use-cases/quote-follow-up/

## The sequence

1. The quotation becomes an opportunity with a value. Values are stored in **minor units** so nothing is lost to rounding or to a currency assumption.
   - Result: The pipeline now has something to move, and the follow-up has something to be about.
2. A follow-up is created with a due time and a reason that names the quotation.
   - Result: Whoever picks it up later knows what was promised without reading the thread.
3. At the due time the chase goes out on the channel the conversation was on, under that channel autonomy rule.
   - Result: Held under `ask_before_send`, sent under `autonomous`, prepared and left alone under `draft_only`.
4. The reply is classified. Interest moves the stage; a question about the number is escalated; silence schedules the next attempt.
   - Result: `raise_for_review` marks an opportunity a person needs to look at, and `clear_review` is how that ends.

## The refusal that makes this usable

`safe_sales.py` is the rule that Connect does not invent commercial terms. A price, an SLA or a warranty that Knowledge does not support is refused and escalated to a person rather than improvised. On a quotation chase that rule fires constantly, because the natural next question from a customer is about the number.

Refusing is the correct behaviour rather than a gap, and it is what makes an automated chase safe to run at all. The alternative — an agent that confidently restates a figure it half-remembers from a thread — creates a commitment somebody has to honour or withdraw.

> **Careful** On the realtime voice path the rule can only live in the instructions, so a breach is **detected rather than prevented**. `price_spoken` counts the lines the voice priced, through the same expression the carrier path checks each sentence with, so both paths agree on what counts as a price. Treat a quotation chase by voice as something to review, not something to leave running unwatched.

## What has to be in Knowledge

| Question the customer asks | Answerable if Knowledge carries | Otherwise |
|---|---|---|
| Is the quotation still valid? | The validity period as a stated fact | Escalated to a person |
| What does it include? | The scope, in the wording you use | Escalated |
| Can you do better on price? | Nothing makes this answerable | Always escalated — a discount is a commercial term |
| How long from order to delivery? | The stated lead time | Escalated, because a lead time is a promise |
| What happens if it goes wrong? | The warranty or support terms as written | Escalated |

Almost every row escalates when Knowledge is thin, which is the honest shape of this use case: the chase is automatic, the commercial conversation is not, and the ratio between them is decided by what you have written down.

## Where it goes wrong

**Every chase ends in an escalation** — Knowledge carries no commercial facts at all. The decision log lists the refusals with their rule, which is the fastest inventory of what to write down.
**The chase went out after the deal was won** — The opportunity moved but the follow-up did not. `stop_for_thread` and `stop_for_person` end chasing explicitly, and closing an opportunity is not the same act as closing its commitments.
**The customer received two chases** — Two conversations about one quotation. A follow-up with the same due time for the same person is deduplicated; two different due times are not, because usually they are two real promises.
**The value looks wrong by a factor of a hundred** — Values are in minor units. A figure entered as though it were major units is the classic version of this.
**A price was quoted on a call** — Check `price_spoken` on the call record. Detection is the mechanism on the realtime path; the carrier path refuses at the sentence.

## What it costs

A quotation chase by email is among the cheapest things Connect does — text, bounded by the daily allowance. By phone it is priced on audio tokens like any call, and a chase that turns into a ten-minute negotiation costs accordingly. The 24-hour lateness rule and the two-per-tick drain both act as spending brakes as much as etiquette ones.

## Questions

### Can Connect send the quotation itself?

It can send a message with the file attached and it can create and version files with provenance, but the numbers in that document are yours. Connect does not compose a price; where Knowledge cannot support a figure, the request is escalated to a person instead.

### Will it negotiate?

No, and that is the design. A discount is a commercial term, and no commercial term Knowledge does not support survives `safe_sales`. What Connect does is keep the conversation alive, find out what is actually blocking the decision, and record it on the opportunity so the person who does negotiate starts informed.

### How many times will it chase?

As many as there are follow-ups, and each one exists because something was promised or scheduled. There is no fixed cadence hidden anywhere; the queue is the cadence, which is why `summary` and `stop_for_person` matter more here than any sequence setting would.

## Related

- [Sales in Connect](https://connectbyjbrh.com/docs/sales/)
- [Why a sales agent should refuse to answer](https://connectbyjbrh.com/research/safe-refusals-in-sales/)
- [Follow-ups in Connect](https://connectbyjbrh.com/docs/follow-ups/)
- [A B2B sales team](https://connectbyjbrh.com/docs/use-cases/b2b-sales-team/)
- [Knowledge in Connect](https://connectbyjbrh.com/docs/knowledge/)
- [Chasing appointments and commitments](https://connectbyjbrh.com/docs/use-cases/appointment-follow-up/)

## What this page is based on

- docs-source/sources/CHANNELS.md §6 — sales, safe_sales and price_spoken
- docs-source/sources/CHANNELS.md §7 — follow-ups
- docs-source/sources/GENERAL.md §9 — files and versions
- Connect capability registry (docs-source/facts.py)
