Recued
Menu
← Back to recipes

Open a quote request by hand

by recued-core v1 25 views

Use “Open a quote request by hand” in Recued. Open a quote request you took by phone, in person, or in an email thread — an order waiting for your price, plus the request record Price and send a quote reads the customer's address from. Changes remain behind Recued's approval controls.

Complete workflow

Seller Quote Request 5 pinned recipes

Use Seller Quote Request in Recued for unspecified pricing, estimate, order, and reception. It includes 7 built-in actions and 4 ready-to-run workflows. Actions that change data use Recued's approval controls.

You are viewing one recipe in this workflow. Installing it opens the complete pack so its other recipes and background automations arrive together.

Use “Open a quote request by hand” in Recued. Open a quote request you took by phone, in person, or in an email thread — an order waiting for your price, plus the request record Price and send a quote reads the customer's address from. Changes remain behind Recued's approval controls.

pack:seller-quote-requestsellerquoteunspecified-pricing
by recued-core pinned v1

Use “Open a quote request” in Recued. Exact-form template that turns one owner-accepted Reception intake response into an order awaiting your price, and records the request itself in the pack's own Records storage. Changes remain behind Recued's approval controls.

pack:seller-quote-requestform-response-templatesellerquote
by recued-core pinned v3

Use “Price and send a quote” in Recued. Pin your price onto a waiting quote request, then send the customer a payment link for exactly that figure.

pack:seller-quote-requestsellerquoteunspecified-pricing
by recued-core pinned v6

Use “Quote board” in Recued. Every quote request against one offer, with the two things you act on: which ones are still waiting for your price, and which ones you have priced and are waiting on the customer. It reads information without changing data in the connected service.

pack:seller-quote-requestsellerquoteboard
by recued-core pinned v4
View pack details, dependencies, and permissions →

Opening a request yourself

Most quote requests do not arrive through a form. Someone rings, stops you on site, or asks in an email thread. This opens the same thing Open a quote request opens from a form — an order waiting in pricing and a request record — from details you type in.

  1. Use the same Seller offer as your form requests: active, priced unspecified.
  2. Give the request your own reference, for example q-2026-014. Letters, digits, dashes and underscores only, up to 40 characters; it is stored in lower case.
  3. Type the customer's email, what they asked for, and optionally who to address the quote to.
  4. The card prints the request reference, manual- followed by yours. The quote board lists the request with everything else, and its Price it button carries that reference to Price and send a quote.

Nothing is emailed at this step. You already spoke to the customer, so an automatic "we have your enquiry" would only be noise; the first email they get from this pack is the quote.

Why the reference is yours to choose

core.seller.order.open is deterministic in (offer, reference): it CREATES on the first run and returns the same order on every run after it. So the reference is what makes running this twice safe — a second run with the same reference finds the order and the record it already made, and changes nothing.

⛔ A reference already used for a DIFFERENT customer is refused before anything is written. Otherwise the second request would quietly converge on the first customer's order, and the quote meant for one person would be priced and sent to another.

⚠ The reference is prefixed manual- so it can never collide with a form request: those are keyed on the submission id, which is a UUID and so never contains manual-. Price and send a quote reads the same prefix to know where the customer's address lives.

Where the customer's address comes from

For a form request, Price and send a quote sends to the address on the accepted response. A request you opened by hand has no response, so it sends to the address you typed here, which is stored on the request record. That makes the record load-bearing for these requests: pricing one without it refuses before anything is written, rather than guessing an address.

⚠ The address is exactly what you typed, trimmed and lower-cased. Nothing checks that the customer can receive mail there — read it back on the card before pricing. There is no edit: a wrong address is fixed by opening the request again under a NEW reference, and the first one stays on the board in pricing until you cancel its order.

⚠ requested_at is when you opened it, because there is no submission time to take. Sort the board on it for when requests came in.

How it works 51 steps

Inspect the data fetches, transforms, gates, and output this recipe runs.

Process (51 steps)
■ email_trimmed trim
Trim whitespace from setting customer email
■ customer_email lowercase
Convert email trimmed to lowercase
■ email_has_at compare
Check if customer email contains @
■ email_bounded_value truncate
Truncate customer email to a max length
■ email_bounded compare
Check if customer email equals email bounded value
■ offer_id trim
Trim whitespace from setting seller offer id
■ offer_id_lowercase lowercase
Convert offer id to lowercase
■ offer_id_is_lowercase compare
Check if offer id equals offer id lowercase
■ offer_id_truncated truncate
Truncate offer id to a max length
■ offer_id_bounded compare
Check if offer id equals offer id truncated
■ reference_trimmed trim
Trim whitespace from setting reference
■ reference lowercase
Convert reference trimmed to lowercase
■ reference_bounded_value truncate
Truncate reference to a max length
■ reference_bounded compare
Check if reference equals reference bounded value
■ reference_words split
Split reference into parts
■ reference_word_count count
Count items in reference words
■ reference_has_no_space compare
Check if reference word count equals 1
■ reference_has_punctuation contains_any
Apply contains_any
■ origin_ref template
Generate text from a template
■ asked_for_trimmed trim
Trim whitespace from setting asked for
■ asked_for truncate
Truncate asked for trimmed to a max length
■ asked_for_card truncate
Truncate asked for trimmed to a max length
■ contact_name_trimmed trim
Trim whitespace from setting contact name
■ contact_name truncate
Truncate contact name trimmed to a max length
■ inputs_valid all
Check if all conditions are true
⚠ inputs_guard guard
Stop if inputs valid equals
◆ offer_read core.seller.offer.get
Get seller offer
■ offer_valid all
Check if all conditions are true
⚠ offer_guard guard
Stop if offer valid equals
◆ existing_request recued-core.seller-quote-request.quote_request.search
Search quote request on seller quote request
■ existing_request_rows default
Apply default
■ existing_request_count count
Count items in existing request rows
■ request_already_recorded compare
Check if existing request count is greater than 0
■ recorded_email default
Apply default
■ recorded_for_someone_else all
Check if all conditions are true
⚠ reference_reuse_guard guard
Stop if recorded for someone else equals
◆ order_open core.seller.order.open
Open seller order
■ order_handle default
Apply default
⚠ order_handle_guard guard
Stop if order handle is empty
■ order_is_manual compare
Check if order open order origin kind equals manual
■ order_waiting_for_price all
Check if all conditions are true
■ order_shape_acceptable any
Check if any of the conditions are true
■ order_valid all
Check if all conditions are true
⚠ order_guard guard
Stop if order valid equals
■ already_open compare
Check if order open result does not equal created
■ requested_at date_add
Add 0 seconds to
◆ request_create recued-core.seller-quote-request.quote_request.create
Create quote request on seller quote request
skip: step.request_already_recorded equal true
■ request_id coalesce
Use the first available value from: request create record id, existing request rows 0 id
■ request_recorded compare
Check if request id has data
⚠ request_guard guard
Stop if request recorded equals
■ card to_summary
Format results as a summary card
▼
Output
summary card
Settings 5 configurable

Configurable at install. Defaults shown — change them anytime in Recued.

asked for setting = [object Object]
reference setting = [object Object]
contact name setting =
customer email setting = [object Object]
seller offer id setting = [object Object]

Uses (4 operations)

Selling Get seller offer core.seller.offer.get
Pack operation Search quote request on seller quote request recued-core.seller-quote-request.quote_request.search
Selling Open seller order core.seller.order.open
Pack operation Create quote request on seller quote request recued-core.seller-quote-request.quote_request.create

Trust & control

What installing this recipe would let it do. Recued grants these permissions at install — review them there before approving.

What it's allowed to do

Read Selling core.seller.offer.get read-only
Write Pack Seller Quote Request external change
Read: quote_request.search · No approvalWrite: quote_request.create · No approval
Write Selling core.seller.order.open external change

Data it touches

SurfacesSelling

About

Tags

pack:seller-quote-requestsellerquoteunspecified-pricingordermanualmoneyrecordsv3

Details

51 steps 5 configurable settings recipe_id: open-quote-request-by-hand