← All standards
Open specificationDraftPublished October 2026Changelog

The Client Desk Build Standard

How the phone gets answered while you are on the tools, and how customers hear that you are running late before they have to ring and ask. Every answer comes off the job record. Written so you can build it yourself.

Used by

  • Receptionist / Administration Assistant
  • Office Administrator
  • Customer Service Officer
  • Scheduling Coordinator

10 min read · Published by AI Pathway

Using Claude? This standard installs as a skill. Guides for ServiceM8, Xero and Simpro.

How to get this live in your business

Done for you: Front DeskThe same product that answers after hours answers in the day too, like a receptionist, on your own number.
Build it myself

DIY. The objects, the checks in order, and the pass test.

What this is

An open build standard for the part of an office admin's day that is not about money: answering the phone during business hours, and keeping customers told when the tradesperson is running late, on the way, or finished.

The core rule

The job record is the job system's page for that customer's job, like job 1042 with its arrival time of 2:30pm. Whatever the customer is told comes off that page, and whatever the customer says goes back onto it.

What it does not do

It never gives a caller a time the job does not hold, never makes a second job for a customer who already has one, never leaves a caller on hold when nobody picks up, and never sends the same running-late message twice.

The hard part

Not the wording. A phone line that answers in the business's name, transfers to a real person, and reads the arrival time off the job system while the caller waits. That is the step not to hand-roll.

It is 10:40 on a Tuesday. The builder is on a roof. The phone has rung four times: a new customer about a leaking shower, Mrs Patel asking when the plasterer is coming, the same Mrs Patel twenty minutes later asking to speak to someone, and a supplier. None of them is about money, and every one of them is the office admin’s job. The plasterer is running an hour late, and nobody has told Mrs Patel, which is why she rang twice.

One daytime call

  1. A call arrives in business hours.
  2. The AI identification and the recording notice come first, before any question.
  3. The caller is looked up by number. If they have an open job, the desk works on that job and files what they said to it. New work is written once, the way Booked After Hours writes it.
  4. Does the job hold the answer, such as an arrival time? If not, nothing is guessed: a callback goes on the job with the on-duty person's name and a due time.
  5. If it does, the caller hears exactly what the job holds.
  6. Did they ask for a person? If not, the call is done and it is on the job.
  7. If they did, they are transferred to the person the roster names. A transfer nobody picks up becomes a callback on the job with that person's name and a due time.
The filled diamond is the record: a time is given only when the job holds one, and the other branch is a callback, never a guess. The last branch is the transfer, and a missed transfer becomes a callback with a name on it.

Take the spec to Claude, ChatGPT or Copilot. The sentence to paste is one click away.

Done for you: Front Desk

Front Desk on Office Voice is the receptionist half of this standard, already built. It is the same product sold as Booked After Hours, and it answers your number during the day as well as after hours. It is held to the pass test below like any other build.

What it does today

  • Answers on your own number during business hours, and says it is an AI and that the call is recorded before it asks anything.
  • Recognises an existing customer, looks up their job and answers from the booking it holds, and can move or cancel that booking on the call.
  • Takes new work the way Booked After Hours does: the caller’s own words, a fixed job type, one job written into ServiceM8 or Simpro during the call.
  • Puts a caller through to a person, and hands off with a fixed reason when it should not answer itself.
  • Rings the customer when today’s job moves later on your board by 15 minutes or more, with the new time read off the job. It checks every ten minutes and rings once per change. See running-late calls on Front Desk.
  • Rings a running-late or on-the-way call when you ask for one on your own line. It reads back the job and the delay, and rings once you say yes.

Not yet

  • A job-complete message. Once a job is finished on your board, Office Voice’s after-the-job call rings to ask how it went, which is not the same as telling the customer it is done. That message is built against the stub, or quoted as a scoped build.
  • Status updates by text. Front Desk rings; it does not send the update as an SMS.

Start a 30-day free trial, connect ServiceM8 or Simpro and point your number at it; prices are on the pricing page. If you would rather we set it up for you, that is a fixed-price set-up: pick a time.

Rather build it yourself? Everything you need is below, free. Joining it to your own inbox, ledger or a bigger workflow? See joining it to your own system. Front Desk is held to the pass tests on this page like anything else.

1. What this standard covers

A builder or a trade with a job system, a phone number and a schedule that moves. Two jobs, both done in business hours:

  • Answering the phone in the day. Most callers already have a job: they want to know when the tradesperson is coming, or they want a person. Some are new work.
  • Keeping customers told. Running late, on the way, all done, sent when the job system says it happened, and only then.

What it does not cover. Calls after hours are Booked After Hours, and new work taken in the day is written by that standard’s rules. The quote, the invoice and the chase are the Cash Seam. Moving the arrival time is the Dispatch Board’s; this standard tells the customer once it has moved. For the whole role on one record, read Virtual Admin.

What cannot meet it. A job system the desk cannot read while the caller waits. Tradify is the common case: with no API, the desk cannot look the caller up or read the arrival time, so the honest answer on every status call would be a callback. A business on Tradify can still take the transfer and callback half. The standard says so rather than pretending the desk can see a job it cannot.

2. The records it keeps, in the shape your developer needs

Nothing here is a new table. The job, its arrival time, its contact and its notes are already in the job system. The roster is a short list the business keeps. The desk adds notes, callbacks and messages to records that already exist.

For your developer. Show the fields for your developer
Job                               # the job system's record
  - id (issued by the job system)
  - customer, phone, status (open | complete)
  - eta                            # the arrival time, as the business writes it, or null
  - contact { phone, consent }     # who gets messages, and whether they agreed
  - notes[] { ref, text, at }      # every call and every message, by call or event id

New job (from a daytime call)     # written by Booked After Hours' rules
  - verbatim                       # the caller's own words
  - type (emergency | routine | quote | unclassified)

Roster                            # the business's own
  - on_duty                        # who takes a transfer and owns a callback
  - callback_within_minutes

Callback                          # a task on the job, never a chat reminder
  - job_id (or the caller's number when no job was written)
  - owner (from the roster), due_by, reason

Update                            # a message, not a record of its own
  - job_id, to (the job's contact), kind (late | on_the_way | complete)
  - eta (from the job, read after the change)
  - trigger (the schedule event that woke it)

A time in a message that is not the job's eta, a message whose trigger is not a schedule change, and a callback with no owner are the three defects this schema makes visible.

3. The checks, in order

The order is the claim. Disclosure comes first because it is first on the call. The lookup comes before new work because, in the day, the caller usually already has a job. The status answer and the transfer come before the messages because a customer who was told the truth on the phone is the one who does not need to ring again. Writing back comes last because it is what makes the next person’s answer right.

  1. Disclosure first, on every daytime call. AI identification and the recording notice come before the first question, on every call the desk answers, the same as after hours. A caller who already has a job is told too.
  2. The caller is looked up before anything is written, and an existing job is worked on, not duplicated. Before writing anything, the build reads for an open job on the caller's number. A caller with an open job is handled on that job: what they said is filed to it, and no new job is made, whatever they rang about.
  3. New work is written the way Booked After Hours writes it. A caller with no open job and new work is written as one job: the caller's own words kept as said, a type from the fixed list (emergency, routine, quote, unclassified) and nothing free-text in its place. The rules do not relax because it is daytime.
  4. A status question is answered from the job, or not answered. "When is he coming?" is answered with the arrival time the job system holds, read by the job's id on that call. When the job holds no time, the caller is told that plainly and a callback is raised for the person on duty. No time is ever estimated, rounded or made up.
  5. A caller who asks for a person is put through, and a missed transfer becomes a callback with a name and a time. In business hours a caller who asks for a person is transferred to whoever the roster names as on duty. If nobody picks up, the build raises a callback on the caller's job, owned by that person, due within the time the business set. The caller is told when to expect it. Nobody is left on hold and nobody is dropped.
  6. Running late, on the way and job complete are sent only when the record changes. A status message is sent when the job system or the board records the change, woken by that event. The time in the message is the time on the job, read after the event arrived. No event, no message.
  7. One message per change, and a new change gets a new message. The same change delivered twice sends one message. A second, different change on the same job sends a second message with the new time. The build reads what was already sent before sending again.
  8. An update goes only to the contact on the job, and only with their consent. A status message goes to the contact recorded on the job, by the channel they agreed to, and to nobody else. Where the job records no consent to messages, nothing is sent and the job says so.
  9. Every call and every update is written back to the job. Whoever opens the job next sees what the customer said and what the customer was told: every call the desk took and every update it sent is filed to the job with the event that caused it.
  10. A job write with no id back is not a booked job. A new job write that returns a null external id did not happen. The caller is not told they are booked, and a callback task with the caller's number goes to the person on duty.
  11. It survives the builder. Someone other than the builder can explain what it does, and it runs on an account the business owns.
  12. The pass test passes. On the business's own number and job system, in business hours: an existing customer rings to ask when the tradesperson is coming and then asks for a person who does not pick up; the arrival time is then moved on the board. The caller hears only the time on the job, gets a callback with a name on it, and receives one running-late message carrying the new time, with all of it on the job.

4. Who rings in the day, and what they get

An existing customer asking when. The desk reads the job by its id and says the arrival time it holds, exactly. If the job holds no time, the caller hears that plainly and gets a callback from the person on duty. “Should be early afternoon” is the sentence this standard exists to stop: it is the one that makes the second call.

An existing customer asking for a person. The desk puts them through to whoever the roster names. When nobody picks up, the caller is not left on hold and is not dropped: a callback goes on their job, owned by that person, due within the window the business set, and the caller is told when to expect it.

A new customer with new work. Written as one job, the same way Booked After Hours writes it: their own words kept, a type from the fixed list, and nothing about the work invented. Daytime is not a reason to relax a rule. If the write comes back with no id, they are not told they are booked.

5. The three messages

MessageWoken byCarriesNever says
Running lateThe arrival time on the job moves laterThe new time, read from the job after the changeA time the job does not hold, or "about an hour"
On the wayThe tradesperson is marked as leaving for this jobThe arrival time the job holds, if it holds oneA promise the board has not made
Job completeThe job is marked complete in the job systemThat the work is done, and who to callA price, a fault cause, or the invoice (that is Invoice Out's)

Each one goes once per change, to the contact on the job, and only if they agreed to messages. A change that arrives twice is one message. A second, different change is a second message with the new time. Where there is no consent, nothing is sent and the job says why, so the person who rings them knows.

6. What stays with a person

  • Every transfer, once it is answered.
  • Every callback, by the person the roster names.
  • Anything said to an upset customer, and any promise about the work.
  • Moving the arrival time. The desk tells the customer it moved; it never moves it.
  • Writing the roster and the callback window.

Facts that can change, and when we checked them

Checked as at 27 October 2026

Front Desk, sold as Booked After Hours, answers the business’s number during the day as well as after hours. It rings running-late calls off a change on the board, and running-late or on-the-way calls when the owner asks on their own line, once per change. It does not send a job-complete message, or any update by text, so those are built against the stub or quoted as a scoped build.

Tradify has no public or partner API, confirmed in writing by their support on 10 April 2026. If that changes, the scope in section 1 changes with it.

Check these against the primary instrument before you rely on them, and store the date you checked beside the value rather than hard-coding it. This standard tells you the shape and where to look. It is not legal advice and it does not tell you that anything complies.

8. What your developer builds, and the step that needs care

One step not to hand-roll: the live line. A number that answers in the business's name with the disclosure first, transfers to a real phone, and reads the job system while the caller waits. That is Front Desk. The rest, the lookup, the message rules, the notes and the callbacks, is wiring a coding agent builds against the stub in an afternoon.

For your developer. Show the setup for your developer
provider:
  stub:       local.mock_client_desk
  production: office_voice.front_desk   # Office Voice / Front Desk, sold as Booked After Hours
  default:    stub                       # no live mapping in the conformance kit yet

the live step
  - the daytime line: Office Voice Front Desk, sold as Booked After
    Hours. The same number answers by day and after hours.
  - running-late and on-the-way calls, on the same Front Desk: off the
    board every ten minutes, or when the owner asks on their own line.
    One call per change, the time read off the job.

stays local                          # yours, and the standard
  - the open-job lookup on the caller's number
  - the roster and the callback window
  - the job-complete message, and any update sent by text, consent first
  - every note written back to the job

cannot meet the standard
  - a job system with no API, for the status answer. The transfer and
    the callback still apply.

A vendor selling a daytime receptionist is usually selling a voice. Ask them one thing: when Mrs Patel asks when the plasterer is coming, where does the time come from, and what does she hear when the job does not have one?

The pass test. On the business’s own number and job system, in business hours, not a sample. Ring from a real customer’s phone and ask when the tradesperson is coming, then ask for a person and let the transfer go unanswered. Then move that job’s arrival time on the board. The recording must open with the disclosure. The time said on the call must be the time the job held. A callback must sit on the job, owned by the person the roster named. Exactly one running-late message must reach the customer’s phone, with the new time, and the job must show the call, the callback and the message. A stub cannot pass this: it holds whatever time it is given and transfers to whoever it is told, so a build can agree with itself there and still tell a real customer a time nobody wrote down.

9. A checklist to hold any build or supplier to

Hold a DIY build or a vendor to this. If a box is empty, it is not in production.

  • 1. Disclosure first, on every daytime call. AI identification and the recording notice come before the first question, on every call the desk answers, the same as after hours. A caller who already has a job is told too.
  • 2. The caller is looked up before anything is written, and an existing job is worked on, not duplicated. Before writing anything, the build reads for an open job on the caller's number. A caller with an open job is handled on that job: what they said is filed to it, and no new job is made, whatever they rang about.
  • 3. New work is written the way Booked After Hours writes it. A caller with no open job and new work is written as one job: the caller's own words kept as said, a type from the fixed list (emergency, routine, quote, unclassified) and nothing free-text in its place. The rules do not relax because it is daytime.
  • 4. A status question is answered from the job, or not answered. "When is he coming?" is answered with the arrival time the job system holds, read by the job's id on that call. When the job holds no time, the caller is told that plainly and a callback is raised for the person on duty. No time is ever estimated, rounded or made up.
  • 5. A caller who asks for a person is put through, and a missed transfer becomes a callback with a name and a time. In business hours a caller who asks for a person is transferred to whoever the roster names as on duty. If nobody picks up, the build raises a callback on the caller's job, owned by that person, due within the time the business set. The caller is told when to expect it. Nobody is left on hold and nobody is dropped.
  • 6. Running late, on the way and job complete are sent only when the record changes. A status message is sent when the job system or the board records the change, woken by that event. The time in the message is the time on the job, read after the event arrived. No event, no message.
  • 7. One message per change, and a new change gets a new message. The same change delivered twice sends one message. A second, different change on the same job sends a second message with the new time. The build reads what was already sent before sending again.
  • 8. An update goes only to the contact on the job, and only with their consent. A status message goes to the contact recorded on the job, by the channel they agreed to, and to nobody else. Where the job records no consent to messages, nothing is sent and the job says so.
  • 9. Every call and every update is written back to the job. Whoever opens the job next sees what the customer said and what the customer was told: every call the desk took and every update it sent is filed to the job with the event that caused it.
  • 10. A job write with no id back is not a booked job. A new job write that returns a null external id did not happen. The caller is not told they are booked, and a callback task with the caller's number goes to the person on duty.
  • 11. It survives the builder. Someone other than the builder can explain what it does, and it runs on an account the business owns.
  • 12. The pass test passes. On the business's own number and job system, in business hours: an existing customer rings to ask when the tradesperson is coming and then asks for a person who does not pick up; the arrival time is then moved on the board. The caller hears only the time on the job, gets a callback with a name on it, and receives one running-late message carrying the new time, with all of it on the job.
  1. 1

    Hold the build to the checklist

    The checks in this standard are what a working build looks like. Implement it yourself, hand it to a developer, or hand the page to an AI with the button below.

  2. 2

    Do not hand-roll

    There is no product for this step. Highest option: none. Checklist plus a build.

  3. 3

    If you are stuck

    Exceptions, three systems, a team that will not maintain a Zap, or an owner who wants it done. We implement when it has to survive the business.

Related reading

Want the whole thing by email?

This paper, plus the rest of the library. One click to stop them.

Run these checks yourself

Every check on this page is published as structured data. This prints them with what to inject, what to assert, and which ones can be proved on your own machine rather than against the live thing.

npx @aipathway/conformance show client-desk-build-standard

Free and open source, CC BY 4.0. The checks are fetched from this page rather than bundled, so a correction here reaches you without a release, and you cannot end up conformant against a stale copy. The raw JSON is there if you would rather wire it into your own harness, and the package shows how to drive your build through the ports.

Built it, and one check failed?

Tell us which one. You have already read the standard and tried it, so the answer is a fixed price to finish that step, not a call to work out what you need.