n8n is a self-hosted workflow automation tool that connects dialnote to hundreds of apps and services. If your team needs full control over data and infrastructure—or you just prefer running automations on your own servers—n8n is a solid fit. There's no native n8n integration to install. You connect through dialnote's custom webhooks, so call events flow straight into your n8n instance without passing through a third party.
Connecting dialnote to n8n#
dialnote sends real-time event data to n8n through a custom webhook. You set up a webhook node in n8n, then point a dialnote webhook at it.
- In your n8n instance, create a new workflow and add a Webhook node as the trigger
- Set the HTTP method to POST
- Copy the Production URL from the webhook node (it'll look like
https://your-n8n.example.com/webhook/abc123) - In dialnote, go to Settings → Webhook Management
- Click Add Webhook and choose Custom Webhook as the provider
- Paste the n8n Production URL and give it a name (e.g., "n8n - Call Workflows"), up to 100 characters
- Under Event Settings, pick the one event this webhook sends — Send call logs, Send call recordings, or Send notes
- Save the webhook
One event per webhook
Each webhook carries a single event — the picker is one choice, not a set of checkboxes. If you want calls, recordings, and notes flowing into n8n, create a separate webhook (and matching n8n workflow) for each one. The URL must be HTTPS.
Test the connection first
After saving, click the Test button on your webhook in dialnote. This sends a fixed sample payload so n8n can detect the data structure before a real call comes in. Heads up: the test payload uses a different shape (event_type: "test.webhook", test: true) than live events, so map your real fields against an actual call once one arrives.
Building Workflows#
Once n8n receives webhook data from dialnote, you can chain any combination of nodes to process it. n8n's canvas editor makes it easy to add logic, transformations, and connections to other services.
Example: Save Calls to a Database and Send Alerts#
This workflow logs every completed call to Postgres and sends a Slack message for missed calls:
- Trigger: Webhook node (receives a dialnote call event)
- IF node: Check whether
data.statusequalsnot_picked - True branch: Slack → Send Message to your #missed-calls channel with caller details
- Always: Postgres → Insert a row with call ID, direction, duration, from/to numbers, and timestamp
The IF node lets you branch logic without duplicating the trigger. Stack as many conditions as you need.
Example: Auto-Create CRM Records#
When a new caller reaches your team, add them to your CRM automatically:
- Trigger: Webhook node
- IF node: Only continue if call direction is
inbound - HTTP Request node: Search your CRM API for the caller's phone number
- IF node: If no record is found → HTTP Request node to create a new contact
Since n8n runs on your infrastructure, calls to internal CRMs or databases don't leave your network. That's a big plus for teams with strict data policies.
Available Webhook Data#
dialnote sends a JSON envelope to your n8n webhook. The type tells you which event fired, and the data object holds the details:
{
"id": "unique-event-id",
"type": "call.completed",
"timestamp": "2024-01-15T10:30:00Z",
"organizationId": "your-org-id",
"data": { "callSid": "call-id", "direction": "inbound", "fromNumber": "+15551234567", "toNumber": "+15559876543", "phoneNumber": { "id": "phone-number-id", "number": "+15559876543" }, "status": "completed", "duration": 180 }
}
- call.completed — direction (inbound/outbound), from/to numbers, status, and duration in seconds
- call.recording.completed — the same call fields plus the recording URL and AI transcription summary
- note.created — the note content, the related contact, and the team member who wrote it
Map any field in a downstream node with n8n's expression editor—for example, {{ $json.data.fromNumber }} to grab the caller's number on an inbound call. Note that data.phoneNumber is an object ({ id, number }) for the dialnote line the call came in on, not the caller—the caller and callee are in data.fromNumber and data.toNumber. For the full payload reference and signature details, see the Webhooks guide.
Popular Workflow Ideas#
n8n's flexibility and self-hosted nature suit more advanced automations:
- Call logging to your own database: Every call → insert a row into Postgres, MySQL, or MongoDB running on your servers
- AI-powered follow-ups: Recording completed → send the transcription to an LLM node for a summary → email it to the assigned team member
- Escalation alerts: Missed call → check if the caller has called 3+ times today → if yes, send an urgent Slack alert to a manager
- CRM sync without third parties: Call completed → update a contact record in your self-hosted CRM via direct API calls
- Scheduled reports: Use a Cron trigger to query your call-log database daily and email a CSV summary to leadership
Verify webhook signatures
dialnote signs every custom webhook payload with an HMAC-SHA256 signature in the X-DialNote-Signature header (formatted sha256=...). Add a Function node right after your webhook trigger to verify it against your webhook secret (the value starting with whsec_, shown next to each endpoint in Settings → Webhook Management). The secret can't be regenerated from the app — delete and recreate the webhook if you need a new one.
Troubleshooting#
If your n8n workflow isn't receiving events, check these common issues:
- Workflow not active: n8n workflows must be toggled to Active to receive production webhooks. Test mode only works while the editor is open.
- Webhook paused in dialnote: After 3 consecutive delivery failures, dialnote auto-disables the webhook. Go to Settings → Webhook Management and re-enable it once you've fixed the cause.
- Wrong event selected: Each webhook sends one event. A "Send call logs" webhook won't fire for recordings — create a separate "Send call recordings" webhook for that.
- Slow endpoint: Your workflow must accept the payload within 30 seconds, or dialnote counts it as a failure.
- URL mismatch: Use the Production URL from n8n, not the test URL — they're different endpoints.
- Firewall or network issues: Since n8n is self-hosted, your server must accept inbound HTTPS from dialnote. Check that port 443 is open and your SSL certificate is valid.
Each webhook card in Settings → Webhook Management shows the last delivery time, consecutive failure count, and the most recent error message.
What's Next#
- Webhooks — full payload reference, signature verification, and webhook management
- Make.com — another visual automation tool that accepts dialnote webhooks
- Zapier — a built-in, no-code path to thousands of apps
- CRM integrations — push call activity to HubSpot, Salesforce, or Pipedrive without a custom endpoint