I am trying to set up a workflow so that I can write messages in slack that are stored in an airtable. I was able to create the workflow so that when I write messages new rows are added to my airtable, HOWEVER, there is no text in the rows. i’ve tried troubleshooting over and over and cannot find a solution.
Project Overview
You’re trying to build an automation that sends Slack messages from specific channels (job sites) into an Airtable base called “Job Management”, specifically into the “Job Messages” table. Each Slack message should create a new row in Airtable containing details like:
message
messageType
slackUserId
slackChannelId
timestamp
job address
(extracted from channel name)hoursWorked
debug
(JSON payload for troubleshooting)
What’s Working
- Slack Trigger is firing correctly (
New Message Posted to Channel
) - Your custom code in the Set Message Info node is parsing Slack events and tagging messageType based on keywords (e.g. “started grading”, “ended grading”)
- The Slack channel info (job address, etc.) is also being extracted properly in a separate node
- You’ve used a Merge node to combine outputs from both nodes before sending to Airtable
- Airtable credentials are connected and you can select the base/table
Steps You’ve Taken
- Tested individual node output
- Set Message Info output looks correct and includes all expected fields
- Merge node output correctly combines channel and message info
- Created new Airtable fields (message, debug, test)
- Confirmed correct field names and types (
long text
andtext
) - Also noted the field IDs like
fldrfrCSSVeaFpiyzC
and attempted to use those directly
- Tried expressions and fixed values
- Used expressions like
{{ $json["message"] }}
and{{ JSON.stringify($json, null, 2) }}
- Also tested hardcoded fixed values like
"Hello from n8n"
in the same field - Even with valid hardcoded values, Airtable table still showed blank rows
- Deactivated and reactivated the workflow
- To enable test execution (as Slack Trigger prevents simultaneous test + production listening)
- Rebuilt the Airtable node from scratch
- Switched to “Create Record” with “Map Each Column Manually”
- Confirmed column visibility and correct selection
The Problem
Despite:
- Seeing successful executions in n8n,
- Correctly formatted data in the output,
- And no Airtable permission or field name mismatches…
No field values show up in Airtable — only empty rows are created.
Even fixed text values fail to appear in Airtable, confirming the issue is not with your JSON parsing or merge logic but likely with the Airtable node interaction itself.
What You Need
You’re looking for someone to:
- Review the Airtable node config
- Possibly spot a version mismatch, input binding issue, or internal Airtable node bug
- Help get even one message to appear in Airtable properly
{
“name”: “Slack to Airtable”,
“nodes”: [
{
“parameters”: {
“trigger”: [“message”],
“watchWorkspace”: true,
“options”: {}
},
“type”: “n8n-nodes-base.slackTrigger”,
“typeVersion”: 1,
“position”: [140, -60],
“name”: “Slack Trigger”,
“credentials”: {
“slackApi”: {
“id”: “REDACTED”,
“name”: “REDACTED”
}
}
},
{
“parameters”: {
“functionCode”: “const data = $json;\nconst message = data.text || "";\nconst user = data.user || "";\nconst channelId = data.channel || "";\nconst timestamp = data.ts || "";\n\nlet messageType = "Other";\nlet workDescription = message;\nlet hoursWorked = "";\n\nif (/started grading/i.test(message)) {\n messageType = "Start";\n} else if (/ended grading/i.test(message)) {\n messageType = "End";\n}\n\nreturn [\n {\n json: {\n message,\n slackUserId: user,\n slackChannelId: channelId,\n timestamp,\n messageType,\n workDescription,\n hoursWorked\n }\n }\n];”
},
“type”: “n8n-nodes-base.function”,
“typeVersion”: 1,
“position”: [160, 120],
“name”: “Set Message Info”
},
{
“parameters”: {
“resource”: “channel”,
“operation”: “get”,
“channelId”: {
“__rl”: true,
“value”: “REDACTED”,
“mode”: “id”
},
“options”: {}
},
“type”: “n8n-nodes-base.slack”,
“typeVersion”: 2.3,
“position”: [160, 280],
“name”: “Extract Job Address from Slack Channel”,
“credentials”: {
“slackApi”: {
“id”: “REDACTED”,
“name”: “REDACTED”
}
}
},
{
“parameters”: {
“mode”: “combine”,
“combineBy”: “combineByPosition”,
“options”: {}
},
“type”: “n8n-nodes-base.merge”,
“typeVersion”: 3.2,
“position”: [420, 100],
“name”: “Merge”
},
{
“parameters”: {
“operation”: “create”,
“base”: {
“__rl”: true,
“value”: “REDACTED”,
“mode”: “list”
},
“table”: {
“__rl”: true,
“value”: “REDACTED”,
“mode”: “list”
},
“columns”: {
“mappingMode”: “defineBelow”,
“value”: {
“message”: “={{ $json["message"] }}”,
“debug”: “={{ JSON.stringify($json, null, 2) }}”,
“test”: “="Hello from n8n"”
}
}
},
“type”: “n8n-nodes-base.airtable”,
“typeVersion”: 2.1,
“position”: [700, 140],
“name”: “Airtable”,
“credentials”: {
“airtableTokenApi”: {
“id”: “REDACTED”,
“name”: “REDACTED”
}
}
}
],
“connections”: {
“Slack Trigger”: {
“main”: [[{ “node”: “Set Message Info”, “type”: “main”, “index”: 0 }]]
},
“Set Message Info”: {
“main”: [
[{ “node”: “Extract Job Address from Slack Channel”, “type”: “main”, “index”: 0 }],
[{ “node”: “Merge”, “type”: “main”, “index”: 0 }]
]
},
“Extract Job Address from Slack Channel”: {
“main”: [[{ “node”: “Merge”, “type”: “main”, “index”: 1 }]]
},
“Merge”: {
“main”: [[{ “node”: “Airtable”, “type”: “main”, “index”: 0 }]]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “REDACTED”
}
}