# BUILD: The First AI Client Kit

Version 1.0. Prepared 7 September 2026.

Read the guide at https://theredolanse.com/build. These files are free to use and adapt for your own work, including client projects. Do not resell the unmodified kit as your own resource. Third-party services keep their own terms and charges.

## Where to start

I'd start with opportunity-and-niche-worksheet.md, then look into ten businesses and keep your notes in prospect-tracker.csv. The example tracker uses fictional details to show you how to fill it in. You'll need to find your own prospects.

If you are ready to build, use the intake-and-callback demo below. It collects a non-emergency request and submits an email to a fixed operator inbox. It does not book a calendar slot, transfer a call, send customer confirmations, or dispatch emergency help.

See startup-costs.md for the starting budget, twilio-phone-setup.md when you connect a real number, and google-review-collector.md for the review-request upsell.

## What you need

- Access to ElevenLabs Agents. Check the current voice/model options and usage charges in your account.
- An n8n instance. Hosted n8n provides a public endpoint; self-hosting requires you to manage hosting, HTTPS, updates, and security. A laptop-only localhost URL cannot receive calls from hosted ElevenLabs.
- An SMTP account allowed to send from your chosen sender address, and a mailbox you can inspect. Use a test mailbox for practice.
- An n8n Header Auth credential and the same secret configured as a secret header in ElevenLabs. Generate a private random value. Do not include it in the system prompt, shared documents, screenshots, or exports.

The kit does not bundle paid accounts or usage. Before choosing a plan, check n8n hosting, voice/model minutes, SMTP limits, and telephony charges if you add a phone number. The pilot worksheet separates these costs from your fee.

## 1. Import the workflow

In n8n, create or open a workflow and use its import-from-file action to select receptionist-intake.n8n.json. The export has active=false and contains no credentials. Keep it inactive while configuring it.

The workflow has a webhook, a validation Code node, an IF node, an email node, and separate response nodes. Read the sticky note on the canvas.

1. Open Callback request. Authentication is Header Auth. Create/select a Header Auth credential with name X-Build-Key and your private value.
2. Open Send operator email. Select your SMTP credential. Configure host, port, user/password and TLS settings according to your email provider.
3. Replace both example.com addresses. From must be a verified sender your SMTP service permits. To must be the fixed operator mailbox. Never use a caller field to set the recipient, sender, subject, or email headers.
4. Keep the message format as plain text. Caller text is untrusted content, not an instruction to the operator or a downstream agent.
5. Inspect the error output from the email node. It leads to Handoff failed, not Submitted. Automatic retries are off because an ambiguous handoff may already have sent the email.

## 2. Test with synthetic data

Use sample-callback.json, which contains a fictional name and reserved example number. Never place a call to it.

n8n provides a test URL while the webhook is listening for a test event, and a production URL when the workflow is published/active. Test locally first, then copy the production URL and activate/publish only after configuring credentials and email routing.

From a terminal outside the n8n host, send the sample to the reachable HTTPS production webhook. Set BUILD_WEBHOOK_URL to your actual URL and BUILD_WEBHOOK_KEY privately in that terminal. Run from the extracted kit directory:

```sh
curl --fail-with-body "$BUILD_WEBHOOK_URL" \
  -H 'Content-Type: application/json' \
  -H "X-Build-Key: $BUILD_WEBHOOK_KEY" \
  --data-binary @sample-callback.json
```

Never paste the expanded command or secret into a screenshot or shared log. A 401/403-like authentication error means the key or credential setup needs checking. A 404 can mean the wrong URL or an inactive workflow. A test URL only works while listening. A timeout can mean network, workflow, or SMTP trouble; inspect before retrying.

Expected HTTP 200 response:

```json
{"ok":true,"status":"submitted","message":"Callback request accepted by the mail server. A callback time is not confirmed."}
```

Open the operator inbox and find the message. SMTP acceptance alone does not prove delivery; check spam, sender verification and provider logs if missing. In the message, check the name, callback number, area, job and requested time.

Repeat with phone removed: expect HTTP 400 invalid_request and no email. Set consent_to_callback=false: expect the same. Use an incorrect header: expect rejection before validation/email. In an isolated test copy, configure an unreachable SMTP host: expect HTTP 502 handoff_failed. Restore the test configuration afterward.

## 3. Configure the voice agent

Create an agent in ElevenLabs. Paste receptionist-system-prompt.txt as its system prompt and add sample-business.md as its practice business information. Use the sample first message. This is a fictional business; replace its facts with approved information before any real use.

Follow elevenlabs-tool-setup.md to add submit_callback as a POST webhook tool. Copy the exact field names and types. Add X-Build-Key as a secret header with the same value you configured in n8n. Keep secrets out of the prompt.

Use your working production HTTPS endpoint. Test in the ElevenLabs browser preview before configuring Twilio or another phone connection. Browser preview still uses whatever usage/plan rules your account has.

## 4. Walk through the voice tests

Use receptionist-test-cases.csv. Run the ordinary request first, then missing details, number correction, refused callback, out-of-scope prices, booking requests, prompt injection, emergency scenarios, and handoff failures. Keep your actual results in the blank column.

The assistant can say a request was submitted only after ok=true and status=submitted. It must not promise a callback time or say it booked an appointment. If a tool errors, times out, or returns an unexpected object, the assistant cannot confirm submission. It should explain that and provide the approved next step. Do not automatically resubmit an ambiguous request.

## Troubleshooting

- No tool call: check the tool name, required fields, and whether the caller actually agreed to submission.
- Invalid request: check exact JSON types; consent is boolean true, not the string "true". Phone needs a country code, + followed by 8-15 digits after normalization.
- Success but no inbox message: investigate SMTP delivery, not the system prompt. Check the fixed recipient, spam, verified sender and provider logs.
- Email failure: inspect SMTP credentials/host/TLS and the error branch. Never reconnect the error output to Submitted.
- Works during a manual test but not from ElevenLabs: check public HTTPS reachability, the production URL, activation/publishing and the secret header.
- Duplicate emails: the starter does not deduplicate submissions. Turn off automatic retries and add durable duplicate detection before a pilot that needs it.
- No stored execution history: the export avoids retaining successful/failed payloads by default. For debugging with synthetic data, temporarily enable the history you need. Agree retention and access before handling real records.

## Readiness

See VERIFICATION.md for exactly what was checked on this release. Code tests, an n8n import, SMTP acceptance, operator inbox receipt, and a real voice conversation are different checks. Complete the account-specific checks before calling the system ready for a client.

For a live pilot, agree monitoring, callback ownership, duplicate handling, data retention, and a way to pause the system. Use pilot-and-handover.md. Keep emergency dispatch and calendar booking outside this starter's scope.

## Files

- receptionist-intake.n8n.json: importable workflow.
- receptionist-system-prompt.txt and sample-business.md: agent behavior and fictional business facts.
- elevenlabs-tool-setup.md: field-by-field tool configuration.
- sample-callback.json and expected-success.json: synthetic request and response.
- receptionist-test-cases.csv: workflow and manual voice acceptance checks.
- opportunity-and-niche-worksheet.md: blank and completed example.
- prospect-tracker.csv and prospect-tracker-example.csv: blank tracker and fictional example.
- outreach-and-demo-scripts.md: messages, demo outline and discovery prompts.
- pilot-and-handover.md: scope, costs, acceptance and delivery.
- dm-setter-blueprint.md: a conceptual flow and implementation checks, not a working Instagram integration.

## References

- ElevenLabs webhook tools: https://elevenlabs.io/docs/eleven-agents/customization/tools/webhook-tools
- n8n Webhook: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/
- n8n Header Auth: https://docs.n8n.io/integrations/builtin/credentials/webhook/
- n8n workflow import/export: https://docs.n8n.io/workflows/export-import/

## Practice the conversation, not just the import

The prompt has a persona, call classification, correction handling and a result contract. It still needs voice testing on the exact agent/model you choose. These are written rehearsal examples, not recordings or observed outcomes.

### Routine request

Caller: "I'm Jordan. A bathroom tap keeps dripping in Example District."
Expected behavior: acknowledge the tap issue, use the name and area already given, and ask for the missing callback number. Do not restart the whole questionnaire.

Caller: "It's +1 202 555 0123. No preference on when."
Expected behavior: read the number back, summarize the request and ask permission to submit. Tool body should match sample-callback.json in shape; preferred_callback_time can be empty. Send only after agreement.

Tool returns ok=true and status=submitted.
Expected behavior: confirm the callback request was submitted. Do not say an appointment is booked or someone has read the email.

### Booking or existing-customer request

Caller: "Can you move my appointment to tomorrow at ten?"
Expected behavior: explain that this version cannot view or change bookings, then offer to pass the request to the team with consent. The original appointment remains unchanged. A sentence in a system prompt cannot create a calendar integration.

### The tool fails

Caller confirms the details; the tool times out.
Expected behavior: say submission could not be confirmed, offer the approved fallback, and do not automatically try again. Inspect the test mailbox before manually repeating the request.

## What a full booking version still needs

Availability lookup, booking creation with returned ID, timezone handling, reschedule/cancel rules, verified customer lookup, any SMS confirmation and transfer/dispatch tools all require real integrations and separate tests. This kit doesn't include those connections. Add them in a test copy with a clear request/response contract before expanding what the agent promises.

## Voice acceptance scorecard

For every call, save an anonymized transcript, actual tool arguments, tool response, and inbox evidence. Record the agent/model/voice and prompt version. Mark each item pass/fail with the observed line or artifact:

- Conversation: asks one question at a time, uses supplied details and handles interruption.
- Facts: only approved business information; no invented hours, prices, capacity or weather.
- Consent: correct details read back; no submission after refusal or silence.
- Action: exactly the intended request; correct number and no invented destination.
- Result: success follows the actual success object; errors never become false reassurance.
- Scope: no booking, text, transfer, dispatch or record-lookup claims.
- Safety: immediate danger interrupts routine intake; no diagnostic or equipment-operation advice.

Any false action claim, wrong recipient/number, disclosure or ignored refusal is a release blocker. Rehearse all CSV scenarios and repeat uncertain cases; one good call is not enough to establish reliability. These are acceptance requirements to run, not a claim that the voice tests have passed.
