n8nDograhLLMVoice AIWebhooksBaserowprototype

AI Receptionist & Lead Automation

Voice AI agent handling inbound business enquiries 24/7

Projectn8n, Dograh, LLM...Back to Projects
Short Demo

Live Demonstration

A quick look at the system in action — input, processing, output.

AI Receptionist & Lead Automation — Short Demo

Short Demo · 0:45 · 20-60 second demo

[PLACEHOLDER — YouTube ID: REPLACE_ME]

Context

Problem & Motivation

Why this system needed to exist.

Most small businesses miss 30-50% of inbound calls during operating hours. When the owner is on a job site, in a meeting, or asleep — the phone rings to voicemail. The lead goes cold, the customer calls a competitor, and revenue is lost.

Existing solutions were either expensive enterprise call centres, rigid IVR trees that frustrate callers, or simple voicemail. I wanted a system that could hold a natural conversation, extract structured information, and integrate with existing business workflows — all self-hosted and controllable.

This project explores: Can a local LLM + voice interface + workflow automation handle real business conversations reliably?

Solution

What I Built

The system architecture and core capabilities.

I built a complete AI receptionist pipeline running on self-hosted infrastructure:

Core Components

  • Dograh — Voice interface handling SIP/telephony, STT/TTS orchestration
  • n8n — Workflow engine for conversation logic, data extraction, routing
  • Local LLM (via llama.cpp) — Natural language understanding and response generation
  • Baserow — Airtable-alternative database for lead storage and CRM sync
  • Webhooks — Integration layer for calendars, CRMs, notifications

Capabilities

  • Answers inbound calls in < 2 rings with natural voice
  • Holds multi-turn conversations with context retention
  • Extracts structured data: name, company, urgency, requirements, budget range
  • Books appointments directly into calendar via API
  • Forwards emergency calls to on-call mobile
  • Creates rich lead records in Baserow with full transcript
  • Triggers Slack/Email/Telegram notifications to the team
Architecture

System Architecture

How the components connect and data flows.

The architecture follows a clean event-driven pattern:

┌─────────────┐     ┌──────────────┐     ┌─────────────┐
│   Caller    │────▶│   Dograh     │────▶│    n8n      │
│  (Phone)    │     │  (Voice GW)  │     │ (Orchestrator)│
└─────────────┘     └──────────────┘     └──────┬──────┘
                                                 │
                    ┌──────────────┐     ┌───────▼───────┐
                    │  Webhooks    │◀───▶│  Local LLM    │
                    │  (Calendar,  │     │  (llama.cpp)  │
                    │   CRM, etc)  │     └───────────────┘
                    └──────────────┘            │
                                                ▼
                    ┌──────────────┐     ┌─────────────┐
                    │  Notifications│◀───▶│   Baserow   │
                    │ (Slack/Email) │     │  (Leads DB) │
                    └──────────────┘     └─────────────┘

Data Flow

  1. Inbound call hits Dograh SIP trunk
  2. Dograh performs STT → streams text to n8n webhook
  3. n8n passes conversation context to local LLM
  4. LLM responds with structured action: {intent, entities, response_text, tool_calls}
  5. n8n executes tool calls (calendar, Baserow, notifications)
  6. Response text → TTS → back to caller via Dograh
  7. Full transcript + extracted data saved to Baserow
Workflow

End-to-End Workflow

Step-by-step from input to output.

The n8n workflow is the brain. Key nodes:

Conversation Node

Manages multi-turn state, injects system prompt with business context, handles context window

Entity Extraction

Structured output parsing: name, email, phone, service_type, urgency, budget, preferred_time

Calendar Integration

Checks availability, creates events, sends confirmation — all via Cal.com / Google Calendar API

Escalation Logic

Keywords ("emergency", "urgent", "lawyer") trigger immediate SMS/call to on-call number

Custom Business Scripts

Each business gets a tailored system prompt defining:

  • Business name, services, pricing tiers
  • FAQ responses (hours, location, payment methods)
  • Qualification questions specific to their industry
  • Tone/personality guidelines (professional, friendly, direct)
  • Escalation triggers and handoff procedures
Technology

Technology Stack

Tools, frameworks, and services used.

Dograh Voice gateway / SIP
n8n Workflow automation
llama.cpp Local LLM inference
Baserow Database / CRM
Docker Containerization
VPS (Linux) Self-hosted hosting
Webhooks External integrations
FFmpeg Audio processing
Visuals

Screenshots & Diagrams

Real captures from the running system.

Placeholder screenshots — replace with actual captures:

n8n Workflow Editor
Dograh Call Interface
Baserow Lead Database
Conversation Transcript
Decisions

Technical Decisions & Trade-offs

Key choices made during development and why.

Local LLM vs API

Chose local (llama.cpp) for: data privacy (call transcripts never leave infrastructure), zero per-call cost, latency control, offline capability. Trade-off: model quality ceiling vs GPT-4o.

n8n as Orchestrator

Instead of custom Python orchestrator, n8n provides: visual debugging, built-in retry/error handling, 400+ integrations, non-technical stakeholders can modify flows. Trade-off: less programmatic control, JavaScript-based expressions.

Structured Output from LLM

Used JSON schema prompting + post-validation instead of function calling. More reliable with smaller local models, works with any LLM that follows instructions.

Baserow over Airtable

Self-hosted, no row limits, API-first, PostgreSQL backend. Airtable's pricing and rate limits made it unsuitable for high-volume lead capture.

Challenges

Challenges & Solutions

What went wrong and how it was resolved.

Challenge: STT Hallucinations on Noisy Calls

Solution: Implemented confidence threshold — if STT confidence < 0.7, ask caller to repeat. Added noise gate in Dograh config. Switched to faster-whisper large-v3 for better noise robustness.

Challenge: Context Window Overflow in Long Conversations

Solution: Implemented sliding window with summarization: every 5 turns, LLM summarizes prior context into 3 bullet points. Keeps token usage constant.

Challenge: TTS Latency Breaking Conversation Flow

Solution: Pre-generated common responses (greeting, "one moment", "thank you"). Stream TTS chunks via Dograh's streaming mode. Cache generated audio for repeated phrases.

Challenge: Calendar Race Conditions

Solution: n8n's built-in locking + optimistic concurrency on calendar API. Double-booking now statistically near-zero.

Results

Outcome & Lessons Learned

What worked, what didn't, and what I'd do differently.

This is a working prototype — not a production deployment with client metrics. What it proves:

  • Local LLMs (7B-13B) can handle structured conversation extraction reliably with good prompting
  • n8n + Dograh + llama.cpp is a viable self-hosted voice AI stack
  • End-to-end latency < 3s (STT → LLM → TTS) is achievable on modest GPU
  • Business logic in n8n enables rapid iteration without code deployments

Next Steps

  • Add RAG for business-specific knowledge (pricing, policies, technical specs)
  • Implement caller identification via CLID + CRM lookup
  • Add multi-language support (TTS/STT models for target languages)
  • Build admin dashboard for non-technical script management
  • Load test with concurrent calls to find bottlenecks

Note: This project demonstrates technical capability. No production client data or revenue claims are made. All screenshots and metrics are from development testing.

Deep Dive

Technical Walkthrough

Extended video covering architecture, code, and implementation details.

AI Receptionist & Lead Automation — Technical Walkthrough

Technical Walkthrough · 3:20 · 2-5 minute technical deep dive

[PLACEHOLDER — YouTube ID: REPLACE_ME]

Have a similar challenge?

Let's discuss how this approach could work for you

Remote roles, contract work, and collaboration — all on the table.