A centralized n8n workflow for processing customer interactions from multiple channels, including webhooks, audio uploads, and inbound email. The system uses n8n to turn raw customer communication into structured, reviewable records. It supports transcription, speaker diarization, summarization, sentiment analysis, and follow-up classification.
The exported
n8nworkflow can be found in the n8n folder.
- Accepts customer input from:
- JSON webhooks
- audio uploads for calls or voicemail
- inbound email via IMAP
- Transcribes and diarizes audio input
- Normalizes incoming data into a consistent schema
- Generates German summaries using an LLM
- Classifies sentiment as
good,neutral, orbad - Flags follow-up items with
open_todo=true - Flags critical cases with
is_critical=true - Stores processed contacts in the
customer_contactstable
docker-compose.yml— local stack for all servicesn8n/customer-contact_n8n_workflow.json— exported n8n workflowwebapp/— browser UI for sending test text and audio payloadsaudio-processing-api/— FastAPI service for transcription and diarization
n8n:http://localhost:5678webapp:http://localhost:8000audio-processing-api:http://localhost:8001ollama:http://localhost:11434
Before starting, make sure you have:
- Docker
- Docker Compose
- an AssemblyAI API key for speaker diarization
Optional:
- IMAP credentials for inbound email processing
- SMTP or other email credentials for notification steps in
n8n
Copy the example environment file:
cp .env.example .envThen update the values in .env to match your local setup.
Start the default stack:
docker compose up --build -dStop the stack:
docker compose stopIf you want to run Ollama locally, start the full profile and pull the model:
docker compose --profile full up --build -d
docker exec -it ollama ollama pull llama3.2:3bNotes:
- The model download may take some time.
- It requires roughly 10 GB of disk space.
Open:
http://localhost:5678
Complete the first-time owner setup, then:
- Open
n8n. - Import
n8n/customer-contact_n8n_workflow.json. - Run the
Manual Triggeronce to create thecustomer_contactsdata table. - Configure the credentials referenced by the workflow.
- Activate the workflow.
If you use the local ollama service, set the base URL of the model credentials to:
http://ollama:11434
If you do not want to use Ollama, replace the LLM node with another supported model provider.
Open the test UI:
http://localhost:8000
The UI allows you to:
- send text messages to
/webhook-test/...or/webhook/... - upload audio files to test or production webhook endpoints
The audio service exposes:
POST /api/transcribeUsesfaster-whisperwith thesmallmodel on CPUPOST /api/diarizeUses AssemblyAI and returns speaker-grouped transcript segments
The web app is a lightweight FastAPI application that serves a single HTML page for manual testing.
It includes:
- an audio upload form with a phone number field
- a message form with name, email, phone, subject, and message
- a sample-message selector for quickly sending predefined customer requests
- The demo setup does not include authentication for the UI, webhooks, or
n8n. - The workflow is currently built for German contacts and summaries.
- The bundled
llama3.2:3bmodel may be too weak for reliable structured output. - Diarization depends on AssemblyAI and requires outbound network access.
- Critical-case detection currently relies on simple rules rather than a more robust decision model.
There is currently no automated test suite.
For now, validation is manual:
- Start the stack with Docker Compose.
- Open the web UI at
http://localhost:8000. - Submit sample text messages and audio files to the test webhooks.
- Confirm that contacts are processed and written to the
customer_contactstable inn8n.