Brand-new AI phone receptionist for small businesses.
- Answers inbound calls (via Vapi)
- Saves leads during the call (tool:
save_lead) - Emails the business (via Resend)
- Stores leads + call summaries in a simple dashboard
cd C:\Users\cprat\OneDrive\ClearPathAI\voice-receptionist
npm install
copy .env.example .envRequired for a real phone assistant:
VAPI_PRIVATE_KEY— from Vapi dashboardRESEND_API_KEY— from ResendBUSINESS_NOTIFICATION_EMAIL— where lead emails goADMIN_PASSWORD— change fromchange-me
npm startOpen:
- Site: http://localhost:3003
- Dashboard: http://localhost:3003/dashboard
Vapi cannot call localhost. Use one of:
- Deploy to Render (recommended), or
ngrok http 3003
Then set:
APP_BASE_URL=https://your-public-urlnpm run setup:vapiCopy the printed VAPI_ASSISTANT_ID=... into .env.
In Vapi → Phone Numbers, assign a number to that assistant.
- Dashboard → Send test lead email (checks Resend)
- Call your Vapi number
- Give name / phone / issue — a lead should appear mid-call
- Hang up — call summary appears under Recent calls
POST /webhooks/vapi
Handles:
| Event | What happens |
|---|---|
tool-calls → save_lead |
Saves lead + emails business immediately |
tool-calls → request_callback |
Flags urgent human follow-up |
end-of-call-report |
Saves transcript/summary + emails summary |
Optional: set VAPI_WEBHOOK_SECRET and the same secret on the Vapi server config.
This MVP is single-tenant (one business via .env). To productize:
- Add Stripe Customer + Subscription on signup
- Create one Vapi assistant + phone number per customer
- Store per-business config in a DB instead of
.env - Price with included minutes + overage
voice-receptionist/
server.js Express app
lib/store.js JSON lead/call storage
lib/email.js Resend helpers
lib/prompt.js Receptionist system prompt + assistant config
lib/vapi-webhook.js Vapi event handlers
scripts/setup-vapi.js Create/update assistant via API
public/ Landing + dashboard