This workflow corresponds to n8n.io template #4037 — we link there as the canonical source.
This workflow follows the HTTP Request → Slack recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"nodes": [
{
"id": "30fcebd0-d271-47ee-98e7-e1c9db4ae1f1",
"name": "WhatsApp Trigger",
"type": "n8n-nodes-base.whatsAppTrigger",
"position": [
-2740,
120
],
"parameters": {
"options": {},
"updates": [
"messages"
]
},
"credentials": {
"whatsAppTriggerApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "a71a46a0-72c6-43d3-a001-b9a2f57da8f5",
"name": "Send Message in Channel",
"type": "n8n-nodes-base.slack",
"position": [
-1640,
-180
],
"parameters": {
"text": "={{ $('WhatsApp Trigger').item.json.messages[0].text.body }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"otherOptions": {
"includeLinkToWorkflow": false
}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "aef4c666-5e07-4692-b9f1-4049bb06e6c8",
"name": "Slack Trigger",
"type": "n8n-nodes-base.slackTrigger",
"position": [
-2700,
920
],
"parameters": {
"options": {},
"trigger": [
"message"
],
"watchWorkspace": true
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "b665feac-c851-4463-851f-f723a940ce80",
"name": "Message Type",
"type": "n8n-nodes-base.switch",
"position": [
-1860,
99
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "text",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "668fdd23-fb5c-4473-b34f-15157b2059f9",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('WhatsApp Trigger').item.json.messages[0].type }}",
"rightValue": "text"
}
]
},
"renameOutput": true
},
{
"outputKey": "audio",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "25381929-f26b-446e-a460-baee6b2a420e",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('WhatsApp Trigger').item.json.messages[0].type }}",
"rightValue": "audio"
}
]
},
"renameOutput": true
},
{
"outputKey": "image",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2dbde15e-324c-46f8-82e8-ccd8084e5718",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('WhatsApp Trigger').item.json.messages[0].type }}",
"rightValue": "image"
}
]
},
"renameOutput": true
},
{
"outputKey": "document",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "b5ed8fb5-0519-4245-81c4-84139e4b14c0",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('WhatsApp Trigger').item.json.messages[0].type }}",
"rightValue": "document"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "bbe095f2-914f-41b9-ad69-b47d0217e392",
"name": "get audio URL",
"type": "n8n-nodes-base.whatsApp",
"position": [
-1640,
20
],
"parameters": {
"resource": "media",
"operation": "mediaUrlGet",
"mediaGetId": "={{ $('WhatsApp Trigger').item.json.messages[0].audio.id }}"
},
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "c645ad49-d722-47fe-9b1e-c8685f0322ea",
"name": "get document URL",
"type": "n8n-nodes-base.whatsApp",
"position": [
-1640,
420
],
"parameters": {
"resource": "media",
"operation": "mediaUrlGet",
"mediaGetId": "={{ $('WhatsApp Trigger').item.json.messages[0].document.id }}"
},
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "2c5eb333-0d26-4ce4-b4ac-a94e183d910c",
"name": "get image URL",
"type": "n8n-nodes-base.whatsApp",
"position": [
-1640,
220
],
"parameters": {
"resource": "media",
"operation": "mediaUrlGet",
"mediaGetId": "={{ $('WhatsApp Trigger').item.json.messages[0].image.id }}"
},
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "78012279-114e-4b8c-bd18-3e33d537c7c8",
"name": "Create Channel",
"type": "n8n-nodes-base.slack",
"onError": "continueRegularOutput",
"position": [
-2520,
120
],
"parameters": {
"resource": "channel",
"channelId": "={{ $('WhatsApp Trigger').item.json.messages[0].from }}",
"channelVisibility": "private"
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "9413ee28-9b92-409a-807a-38b1139cd837",
"name": "get All Channels",
"type": "n8n-nodes-base.slack",
"position": [
-2300,
120
],
"parameters": {
"filters": {
"types": [
"private_channel"
]
},
"resource": "channel",
"operation": "getAll",
"returnAll": true
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "40d09c7b-aeb2-491f-864e-b92023dc8e57",
"name": "Filter Channel by Name",
"type": "n8n-nodes-base.filter",
"position": [
-2080,
120
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "586f6026-e893-46f8-ac89-4b16db24339a",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.name }}",
"rightValue": "={{ $('WhatsApp Trigger').item.json.messages[0].from }}"
}
]
}
},
"retryOnFail": false,
"typeVersion": 2.2
},
{
"id": "f0ed5738-9442-42a9-bc76-bd71eaf2fb5b",
"name": "upload media",
"type": "n8n-nodes-base.slack",
"position": [
-1200,
220
],
"parameters": {
"options": {
"channelId": "={{ $('Message Type').item.json.id }}"
},
"resource": "file"
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "6a749b7b-78c0-4462-9019-f059d0845382",
"name": "download media",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1420,
220
],
"parameters": {
"url": "={{ $json.url }}",
"options": {
"response": {
"response": {}
}
},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
},
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "66423f74-1ce5-44e2-8b41-2dcb6d22b1a9",
"name": "Get Channel by ID",
"type": "n8n-nodes-base.slack",
"position": [
-2480,
920
],
"parameters": {
"options": {},
"resource": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.channel }}"
},
"operation": "get"
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "5587398a-5a6b-48b4-b056-1ef2ae40aaae",
"name": "Checking Message Type",
"type": "n8n-nodes-base.switch",
"position": [
-2260,
920
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "media",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "7e42c494-a9eb-45ea-86cc-8a1e1d100fe1",
"operator": {
"type": "array",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $('Slack Trigger').item.json.files }}",
"rightValue": ""
}
]
},
"renameOutput": true
},
{
"outputKey": "text",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "f1f5bbbd-5536-4a8c-9c93-910cf51b1847",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $('Slack Trigger').item.json.text }}",
"rightValue": ""
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "00abbd13-b397-4a8b-ac9a-5f4c7bb37823",
"name": "Send Message",
"type": "n8n-nodes-base.whatsApp",
"position": [
-2040,
1020
],
"parameters": {
"textBody": "={{ $('Slack Trigger').item.json.blocks[0].elements[0].elements[0].text }}",
"operation": "send",
"phoneNumberId": "=674099929114802",
"additionalFields": {},
"recipientPhoneNumber": "={{ $('Get Channel by ID').item.json.name }}"
},
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "52c609ed-0085-4762-badc-5fab0e526dfe",
"name": "Get Media URL",
"type": "n8n-nodes-base.slack",
"position": [
-2040,
820
],
"parameters": {
"fileId": "={{ $('Slack Trigger').item.json.files[0].id }}",
"resource": "file",
"operation": "get"
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "f8d972de-add6-4858-abe8-d13ceebee263",
"name": "Download Media",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1820,
820
],
"parameters": {
"url": "={{ $json.url_private_download }}",
"options": {
"response": {
"response": {}
}
},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "1552ab2b-d8c4-4324-a1a2-4a27e981f292",
"name": "Send Message1",
"type": "n8n-nodes-base.whatsApp",
"position": [
-1600,
820
],
"parameters": {
"mediaPath": "useMedian8n",
"operation": "send",
"messageType": "document",
"phoneNumberId": "=674099929114802",
"additionalFields": {},
"recipientPhoneNumber": "={{ $('Get Channel by ID').item.json.name }}"
},
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "592dd9e2-8b95-420a-910d-f6f3a5bd583e",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2840,
620
],
"parameters": {
"width": 1860,
"height": 560,
"content": "## Slack to WhatsApp Flow\n- Trigger: Slack Trigger listens for Slack messages (text or media).\n- Message Type Handling: Checking Message Type uses a Switch to determine whether it\u2019s text or media.\n- Text Handling: Extracts text and sends it back to WhatsApp via Send Message.\n- Media Handling: Gets media URL (Get Media URL).\n- Downloads the file (Download Media) and (presumably in the missing portion) sends it to WhatsApp as a document/media."
},
"typeVersion": 1
},
{
"id": "23ee1ef0-ad8d-4c4a-8558-40bcbbfb1406",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2840,
-200
],
"parameters": {
"width": 1860,
"height": 780,
"content": "## WhatsApp to Slack Flow\n- Trigger: WhatsApp Trigger listens for new WhatsApp messages.\n- Message Type Routing: Message Type node uses a Switch to check if the message is text, audio, image, or document.\n- Slack Channel Management: Checks if a private Slack channel already exists for the WhatsApp contact (from field).\n- If not, creates one using Create Channel.\n- Media Processing (for non-text): Gets WhatsApp media URL via get audio/image/document URL.\n- Downloads it (download media) and uploads to Slack using upload media.\n- Text Handling: For text, sends message directly to Slack using Send Message in Channel."
},
"typeVersion": 1
}
],
"connections": {
"Message Type": {
"main": [
[
{
"node": "Send Message in Channel",
"type": "main",
"index": 0
}
],
[
{
"node": "get audio URL",
"type": "main",
"index": 0
}
],
[
{
"node": "get image URL",
"type": "main",
"index": 0
}
],
[
{
"node": "get document URL",
"type": "main",
"index": 0
}
]
]
},
"Get Media URL": {
"main": [
[
{
"node": "Download Media",
"type": "main",
"index": 0
}
]
]
},
"Slack Trigger": {
"main": [
[
{
"node": "Get Channel by ID",
"type": "main",
"index": 0
}
]
]
},
"get audio URL": {
"main": [
[
{
"node": "download media",
"type": "main",
"index": 0
}
]
]
},
"get image URL": {
"main": [
[
{
"node": "download media",
"type": "main",
"index": 0
}
]
]
},
"Create Channel": {
"main": [
[
{
"node": "get All Channels",
"type": "main",
"index": 0
}
]
]
},
"Download Media": {
"main": [
[
{
"node": "Send Message1",
"type": "main",
"index": 0
}
]
]
},
"download media": {
"main": [
[
{
"node": "upload media",
"type": "main",
"index": 0
}
]
]
},
"WhatsApp Trigger": {
"main": [
[
{
"node": "Create Channel",
"type": "main",
"index": 0
}
]
]
},
"get All Channels": {
"main": [
[
{
"node": "Filter Channel by Name",
"type": "main",
"index": 0
}
]
]
},
"get document URL": {
"main": [
[
{
"node": "download media",
"type": "main",
"index": 0
}
]
]
},
"Get Channel by ID": {
"main": [
[
{
"node": "Checking Message Type",
"type": "main",
"index": 0
}
]
]
},
"Checking Message Type": {
"main": [
[
{
"node": "Get Media URL",
"type": "main",
"index": 0
}
],
[
{
"node": "Send Message",
"type": "main",
"index": 0
}
]
]
},
"Filter Channel by Name": {
"main": [
[
{
"node": "Message Type",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
httpBearerAuthhttpHeaderAuthslackApiwhatsAppApiwhatsAppTriggerApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow enables seamless, bidirectional communication between WhatsApp and Slack using n8n. It automates the reception, processing, and forwarding of messages (text, media, and documents) between users on WhatsApp and private Slack channels.
Source: https://n8n.io/workflows/4037/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Type in Slack. Walk away. Get a professional PDF report and a structured Excel fix sheet delivered to Google Drive and posted back in your Slack thread — fully automated, zero manual work.
This workflow automates the full company enrichment pipeline: Simply import CSV company lists to Slack and save time on enrichment and CRM maintenance. It processes uploaded files, extracts company do
This workflow is designed for **customer support teams, e-commerce founders, and operations managers** who want to handle thousands of customer queries seamlessly. Instead of building a brand-new chat
Automatically convert structured Slack messages into Jira issues with parsed titles, descriptions, and priorities. This workflow also downloads file attachments from Slack (e.g., screenshots, logs, or
This workflow listens for incoming WhatsApp messages that contain media (e.g., images) and automatically downloads the media file using WhatsApp's private media URL. The trigger node activates when a