Your First Workflow
This is a member-only chapter. Log in with your Signal Over Noise membership email to continue.
Log in to readModule 2: Your First Workflow
The best way to understand n8n is to build something. Not a toy example — an actual trigger-process-output loop that does a real job.
This module covers installation, then walks through building a webhook-to-Telegram notification workflow. By the end you’ll have seen every part of the n8n interface that matters, and you’ll have a mental model that scales to every other workflow you build.
Installation
You have two options. Docker is the better choice for most people.
Docker (recommended)
If you have Docker installed, one command gets you running:
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v ~/.n8n:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
This runs n8n at http://localhost:5678, with your workflows and credentials stored in ~/.n8n on your machine. The -v flag is the important part — it means your data persists when the container restarts.
For a persistent setup that survives reboots, use a docker-compose.yml:
services:
n8n:
image: docker.n8n.io/n8nio/n8n
restart: unless-stopped
ports:
- "5678:5678"
volumes:
- ~/.n8n:/home/node/.n8n
environment:
- N8N_HOST=localhost
- N8N_PORT=5678
- WEBHOOK_URL=http://localhost:5678/
Then docker compose up -d and it runs in the background.
npm
If you’d rather not use Docker:
npm install n8n -g
n8n start
That’s it. Same interface, same port. The Docker route is easier to maintain and move between machines, but npm works fine for getting started.
The Three Building Blocks
Every n8n workflow has the same structure, regardless of complexity.
Trigger — What starts the workflow. This could be a webhook receiving an HTTP request, a cron schedule firing at a set time, a new row appearing in a database, a file being dropped in a folder, or a manual run you kick off from the interface. Every workflow has exactly one trigger node.
Process — What happens to the data. This is where you transform, enrich, filter, or route the data that came in. A workflow might have zero process nodes (trigger directly to output) or twenty. Most useful workflows have two to five.
Output — What the workflow does with the result. Send a notification, write to a database, make an API call, create a file, update a spreadsheet.
Understanding this structure means you can read any workflow and understand what it does before you look at the configuration of individual nodes.
Building the Webhook-to-Telegram Flow
We’ll build a workflow that: receives a webhook request, extracts data from the request body, and sends a formatted message to a Telegram chat.
This is the pattern behind my contact form pipeline. The form sends a webhook to n8n, n8n processes it and fires a Telegram notification. What we’re building here is the skeleton.
Step 1: Create a new workflow
Open n8n at http://localhost:5678. Click “New Workflow” in the top right.
Step 2: Add a Webhook trigger
Click the ”+” button to add a node. Search for “Webhook”. Add it.
The webhook node generates a URL. You’ll see a “Test URL” and a “Production URL”. Use Test URL while building — it activates temporarily when you click “Test workflow”. The Production URL stays active when the workflow is deployed.
Leave the HTTP method as POST. Leave everything else at defaults for now.
Step 3: Add a Set node
Add another node. Search for “Set”. This node lets you create or transform fields on the data passing through.
Add a field called message. Set its value to an expression:
Hello from webhook. Received: {{ $json.body.message }}
The {{ }} syntax is n8n’s expression language. $json refers to the data from the previous node. body.message assumes the incoming webhook has a JSON body with a message field. Adjust this to match whatever your trigger will actually send.
Step 4: Add a Telegram node
Add another node. Search for “Telegram”.
You’ll need a Telegram bot. If you don’t have one:
- Open Telegram and message
@BotFather - Send
/newbotand follow the prompts - Copy the API token it gives you
Back in n8n, create a new credential for Telegram. Paste your bot token.
Set the Chat ID to your Telegram user ID or a group chat ID. (You can get your user ID by messaging @userinfobot in Telegram.)
Set the text field to {{ $json.message }} — this pulls the message field we set in the previous node.
Step 5: Test it
Click “Test Workflow” in the top right. n8n activates the test webhook URL and waits.
Open a terminal and send a test request:
curl -X POST http://localhost:5678/webhook-test/[your-webhook-id] \
-H "Content-Type: application/json" \
-d '{"message": "test message"}'
You should see data flowing through each node in the n8n canvas, highlighted in green. And a Telegram message should arrive.
Step 6: Save and activate
Save the workflow. Toggle the “Active” switch in the top right. The workflow is now live — any POST to the production webhook URL will trigger it.
Reading the Execution Log
Every time a workflow runs, n8n logs the execution. Click “Executions” in the left sidebar to see the history. Each row shows the timestamp, the trigger that fired, and whether the run succeeded or failed.
Click into any execution to see the data that passed through each node. This is your debugging tool. When something goes wrong — wrong field name, unexpected data shape, API error — the execution log shows you exactly where the failure happened and what data was present at that point.
Get comfortable with the execution log early. You’ll use it constantly.
What You’ve Built
A complete trigger-process-output loop. A webhook receives data, a Set node shapes it, a Telegram node delivers it. Three nodes, one working integration.
Every more complex workflow is this same structure with more nodes in the middle.
The next module adds AI to the process step.
Check Your Understanding
Answer all questions correctly to complete this module.
1. What are the three building blocks of every n8n workflow?
2. Why is the 'Respond to Webhook' node important?
3. What is the purpose of n8n's execution log?
Pass the quiz above to unlock
Save failed. Please try again.