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.
The sequence#
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.
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.
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 underautonomous, prepared and left alone underdraft_only.The reply is classified. Interest moves the stage; a question about the number is escalated; silence schedules the next attempt.
Result
raise_for_reviewmarks an opportunity a person needs to look at, andclear_reviewis 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.
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_threadandstop_for_personend 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_spokenon 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.