Pattern 2: Contact Form Pipeline
This is a member-only chapter. Log in with your Signal Over Noise membership email to continue.
Log in to readModule 4 · Section 3 of 6
Pattern 2: Contact Form Pipeline
What it does: Receives a contact form submission via webhook, stores it in a database, sends a Telegram notification with the key details.
Why it exists: I built a contact API for jimchristian.net. Rather than having the API endpoint do everything, I had it do the minimum: validate the input, store the submission, and fire a webhook to n8n. n8n handles the notification. This separation means I can change the notification behaviour without touching the API code.
The nodes:
-
Webhook trigger — HTTP POST. The contact API sends a JSON body containing
name,email,subject, andmessage. -
Set node — Formats a notification message. I pull the four fields and build a readable summary:
New contact from {{ $json.body.name }} ({{ $json.body.email }}) Subject: {{ $json.body.subject }} {{ $json.body.message }} -
Telegram node — Sends the formatted message. I use a specific Telegram group for contact notifications so I can reply in-thread.
-
Respond to Webhook — Returns a 200 OK to the API that called the webhook. Without this node, the webhook trigger holds the connection open until it times out. Always close the loop.
What to adapt: The payload fields depend on your form. The notification destination is your choice. If you want to route based on subject or message content — that’s where you’d add a classification step before the Telegram node, using the pattern from Module 3.