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 →
{
"name": "B: ReviewBot \uba54\uc778 \ucee8\ud2b8\ub864\ub7ec",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "4c4dbe7d-cc4d-4641-b393-6d17ac6e8fd6",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
-480,
-256
],
"id": "72ce4e4f-6a95-4e6f-bc32-c5014d32d2cd",
"name": "Webhook"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"leftValue": "={{ $json.body.event_type }}",
"rightValue": "merge_request",
"operator": {
"type": "string",
"operation": "equals"
},
"id": "731222f7-87df-45f1-b2e1-17d842dbc784"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "MR"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "75d8fc3d-7923-4e6e-9985-872cb2726bd1",
"leftValue": "={{ $json.body.event_type }}",
"rightValue": "note",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "note"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "c56ae821-3e80-4e27-be6d-fbdaa24d2f84",
"leftValue": "={{ $json.body.event_type }}",
"rightValue": "DiscussionNote",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "DiscussionNote"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
-256,
-272
],
"id": "30a12484-0e61-45b8-a21e-ba1d1fa0f88b",
"name": "Check Event Type"
},
{
"parameters": {
"jsCode": "const body = $input.item.json.body;\n\nif (!body) {\n return []; \n}\n\nconst isComment = !!body.merge_request;\nconst mr = isComment ? body.merge_request : body.object_attributes;\n\nif (!mr || !mr.iid) return [];\n\nconst projectId = body.project?.id || mr.target_project_id || body.project_id;\nconst targetBranch = (mr.target_branch || \"\").toLowerCase();\nconst description = mr.description || \"\";\nconst noteText = body.object_attributes?.note || \"\";\n\n// TODO: \uc544\ub798 \ube0c\ub79c\uce58\uba85\uc77c \uacbd\uc6b0 \uc791\ub3d9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ud300 \ucee8\ubca4\uc158\uc5d0 \ub9de\uac8c \uc218\uc815\ud558\uc138\uc694 (\ubcf4\ud1b5 master, release\uc5d0 MR\ud560 \ub550 \ub300\ub7c9\uc758 changes\uac00 \ubc1c\uc0dd\ud558\ubbc0\ub85c exclude \ud574\ub450\ub294 \uac83)\nconst excludedBranches = [\"master\", \"release\"]; \nconst isExcluded = excludedBranches.includes(targetBranch);\nconst forceReview = description.includes('#force-review') || noteText.includes('#force-review');\n\nif (!isExcluded || forceReview) {\n return {\n json: {\n ...$input.item.json,\n info: {\n type: isComment ? \"\ub313\uae00 \ub9ac\ubdf0\" : \"MR \ub9ac\ubdf0\",\n project_name: body.project?.name || \"Project\",\n project_url: body.project?.web_url || body.project?.git_http_url,\n mr_title: mr.title,\n mr_url: mr.url\n },\n body: {\n ...body,\n project: {\n ...(body.project || {}),\n id: projectId\n },\n merge_request: {\n ...(body.merge_request || {}),\n iid: mr.iid\n },\n object_attributes: {\n ...(body.object_attributes || {}),\n iid: mr.iid\n }\n },\n project: { id: projectId },\n object_attributes: { iid: mr.iid }\n }\n };\n}\n\nreturn [];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
416,
-256
],
"id": "751e0052-9f83-4a21-b397-8b0bbc1b7466",
"name": "Filter Deployment"
},
{
"parameters": {
"method": "POST",
"url": "=https://YOUR_MATTERMOST_DOMAIN/hooks/YOUR_WEBHOOK_TOKEN",
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "text",
"value": "=#### :aiddalkkac: [{{ $json.info.type }}/\ud300[{{ $json.info.project_name }}]({{ $json.info.project_url }})] \ub9ac\ubdf0\ubd07 \uc791\ub3d9 :comp:\n- **\ub300\uc0c1 MR:** [{{ $json.info.mr_title }}]({{ $json.info.mr_url }})\n- **\ub313\uae00 \ub9c1\ud06c:** {{ $json.info.mr_url }}#note_{{ $json.id }}\n- **\ub9ac\ubdf0 \uc2dc\uac01:** {{ $json.created_at.toDateTime().setZone('Asia/Seoul').setLocale('ko').toFormat('M\uc6d4 d\uc77c (cccc) a h\uc2dc mm\ubd84') }}\n\n---\n###### :hekoko_shake: \ub9ac\ubdf0 \ub0b4\uc6a9 \uc694\uc57d\n```\n{{ $json.body.substring(0, 200) }}... \n```\n- [\ubc14\ub85c \ud655\uc778\ud558\ub7ec \uac00\uae30 :glass_mandu:]({{ $json.info.mr_url }}#note_{{ $json.id }})"
}
]
},
"options": {}
},
"id": "c2d25661-c8b0-46cc-a36e-f2ea85ac7d48",
"name": "Send Noti",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1312,
-288
]
},
{
"parameters": {
"mode": "combine",
"combineBy": "combineByPosition",
"options": {}
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
1088,
-288
],
"id": "b63ee5a3-6c67-445a-ad74-0d20c829b291",
"name": "Merge"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "d3d61f07-eef2-4a9c-93af-b8d2e9a2b383",
"leftValue": "={{ $json.body.object_attributes.action }}",
"rightValue": "open",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
},
{
"id": "8b6a2c41-84de-4698-a54f-0c738dd7606a",
"leftValue": "={{ $json.body.object_attributes.action }}",
"rightValue": "reopen",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "or"
},
"options": {}
},
"type": "n8n-nodes-base.filter",
"typeVersion": 2.2,
"position": [
-32,
-448
],
"id": "c73afc8d-6e36-4861-8847-e15f3687e33d",
"name": "Filter OpenMR"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "7f8b5391-64cf-4f85-94b2-75a8b0912462",
"leftValue": "={{ $json.body.object_attributes.note.toLowerCase() }}",
"rightValue": "\ub9ac\ubdf0\ubd07\uc804\uccb4",
"operator": {
"type": "string",
"operation": "startsWith"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.filter",
"typeVersion": 2.2,
"position": [
-32,
-256
],
"id": "2d29ecc7-b162-42c7-8f10-4c4bbbc26255",
"name": "Filter Comment - All"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "3868ba49-f134-4f00-9501-34e15b6d5488",
"name": "statKey",
"value": "mrAll",
"type": "string"
}
]
},
"includeOtherFields": true,
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
192,
-448
],
"id": "b060a31c-35ad-4152-85f1-b18f56ccb41e",
"name": "setStatKey - mrAll"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "dd7868e0-28fa-4884-9f2c-a568c00b9527",
"name": "statKey",
"value": "commentAll",
"type": "string"
}
]
},
"includeOtherFields": true,
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
192,
-256
],
"id": "6a659678-3e07-455d-bc30-432f2b24642a",
"name": "setStatKey - commentAll"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "lDFEqmcUwfrwCoCXa3ACp",
"mode": "list",
"cachedResultUrl": "/workflow/lDFEqmcUwfrwCoCXa3ACp",
"cachedResultName": "B: ReviewBot Simple (\uc804\uccb4 \ub9ac\ubdf0)"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
864,
-288
],
"id": "2fad3a2c-b1fd-409e-9cff-58c4d0f20170",
"name": "Call Simple ReviewBot"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "196fa6c7-b549-45d5-b7a6-f939c5b182ac",
"leftValue": "={{ $json.body.object_attributes.type }}",
"rightValue": "DiffNote",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
},
{
"id": "93a4c0dc-4c04-4deb-a25c-da2bff06b624",
"leftValue": "={{ $json.body.object_attributes.note.toLowerCase() }}",
"rightValue": "\ub9ac\ubdf0\ubd07\uc774\uac83\ub9cc",
"operator": {
"type": "string",
"operation": "startsWith"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.filter",
"typeVersion": 2.2,
"position": [
-32,
-64
],
"id": "6f57ec96-94bc-4849-8d28-ab06d73f93a5",
"name": "Filter Comment - DiffNote"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "XR_C4SwSzNCNY_Q51ZVnu",
"mode": "list",
"cachedResultUrl": "/workflow/XR_C4SwSzNCNY_Q51ZVnu",
"cachedResultName": "B: ReviewBot Delicate (\uc0c1\uc138 \ub9ac\ubdf0)"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
864,
-96
],
"id": "b15a5906-8805-46f0-bb7a-61ef3852c94c",
"name": "Call Delicate ReviewBot"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "7ae82cbd-d3d3-4269-83c1-d4e22e5d0359",
"name": "statKey",
"value": "commentDelicate",
"type": "string"
}
]
},
"includeOtherFields": true,
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
192,
-64
],
"id": "e9d6840b-056f-4d1f-9bb1-189c9ed646d4",
"name": "setStatKey - commentDelicate"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 3
},
"conditions": [
{
"leftValue": "={{ $json.statKey }}",
"rightValue": "mrAll|commentAll",
"operator": {
"type": "string",
"operation": "regex"
},
"id": "236ca25f-3fa1-4857-9939-3170b5a367d4"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "all"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 3
},
"conditions": [
{
"id": "5d230f67-7aca-4f8a-b22e-f056c6a10983",
"leftValue": "={{ $json.statKey }}",
"rightValue": "commentDelicate",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "delicate"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.4,
"position": [
640,
-192
],
"id": "a9c25fc5-d9c3-4f3f-8a57-fee3051c34c5",
"name": "Route Review Type"
},
{
"parameters": {
"content": "\u26a0\ufe0f **Send Noti \ub178\ub4dc \uc124\uc815 \ud544\uc694**\n\n`Send Noti` \ub178\ub4dc\uc758 URL\uc744\n\uc5ec\ub7ec\ubd84 \ud300 Mattermost \ucc44\ub110\uc758\n**Incoming Webhook URL**\ub85c \uad50\uccb4\ud558\uc138\uc694.\n\nMattermost \u2192 \ucc44\ub110 \uba54\ub274 \u2192 Integrations\n\u2192 Incoming Webhooks\uc5d0\uc11c \uc0dd\uc131",
"height": 144,
"width": 176,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"position": [
1280,
-128
],
"typeVersion": 1,
"id": "2fedb20b-7a80-433f-bf2a-175598097538",
"name": "Sticky Note"
},
{
"parameters": {
"content": "Workflow \ud65c\uc131\uc5d0 \ud544\uc694\ud55c Credential\uc744 \ub4f1\ub85d\ud558\uc138\uc694 (Ex. GitLab, GPT API, Redis \ub4f1) ",
"height": 80,
"width": 224,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"position": [
-432,
-384
],
"typeVersion": 1,
"id": "92d973bf-f429-4ba6-9e16-60c823975593",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## \ud83d\udccb B: ReviewBot (\uba54\uc778) \u2014 \uc124\uc815 \uac00\uc774\ub4dc\n\n### 1\ufe0f\u20e3 Credentials \ub4f1\ub85d (\uba3c\uc800 \uc644\ub8cc)\n- **GitLab API**: Personal Access Token (`api` \uc2a4\ucf54\ud504)\n- **Google Gemini(PaLM) API**: Gemini API Key\n- **Redis**: Redis \uc11c\ubc84 \uc811\uc18d \uc815\ubcf4\n\n### 2\ufe0f\u20e3 Send Noti \ub178\ub4dc \uc124\uc815\n- `URL` \ud544\ub4dc\ub97c \ud300 Mattermost \ucc44\ub110 **Incoming Webhook URL**\ub85c \uad50\uccb4\n\n### 3\ufe0f\u20e3 \uc11c\ube0c \uc6cc\ud06c\ud50c\ub85c\uc6b0 \uc5f0\uacb0 (\uc911\uc694!)\n- `Call Simple ReviewBot` \ub178\ub4dc: **ReviewBot Simple** \uc6cc\ud06c\ud50c\ub85c\uc6b0 \uc120\ud0dd\n- `Call Delicate ReviewBot` \ub178\ub4dc: **ReviewBot Delicate** \uc6cc\ud06c\ud50c\ub85c\uc6b0 \uc120\ud0dd\n- \uc138 \ud30c\uc77c\uc744 \ubaa8\ub450 import\ud55c \ud6c4 \uac01 \ub178\ub4dc\uc5d0\uc11c \uc6cc\ud06c\ud50c\ub85c\uc6b0\ub97c \uc7ac\uc120\ud0dd\ud574\uc57c \ud569\ub2c8\ub2e4\n\n### 4\ufe0f\u20e3 GitLab Webhook \ub4f1\ub85d\n- GitLab \ud504\ub85c\uc81d\ud2b8 \u2192 Settings \u2192 Webhooks\n- URL: `https://YOUR_N8N_HOST/webhook/[\uc6f9\ud6c5\ub178\ub4dc Path \uac12]`\n- Trigger: **Merge request events**, **Comments**\n\n### 5\ufe0f\u20e3 \ub9ac\ubdf0\ubd07 \uba85\ub839\uc5b4\n- `\ub9ac\ubdf0\ubd07\uc804\uccb4` : MR \ub313\uae00\ub85c \uc785\ub825 \uc2dc \uc804\uccb4 \ubcc0\uacbd\uc0ac\ud56d AI \ub9ac\ubdf0\n- `\ub9ac\ubdf0\ubd07\uc774\uac83\ub9cc` : Diff \ub77c\uc778 \ub313\uae00\ub85c \uc785\ub825 \uc2dc \ud574\ub2f9 \ud30c\uc77c\ub9cc \uc0c1\uc138 \ub9ac\ubdf0",
"height": 520,
"width": 580,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-480,
-640
],
"id": "setup-guide-b-reviewbot-001",
"name": "Setup Guide Main"
},
{
"parameters": {
"content": "## \u2728 \uc774 \uc6cc\ud06c\ud50c\ub85c\uc6b0\uac00 \ud558\ub294 \uc77c\n\n**MR\uc774 \uc5f4\ub9ac\uac70\ub098 \ub2e4\uc2dc \uc5f4\ub9b4 \ub54c**\n\u2192 AI\uac00 \uc804\uccb4 \ubcc0\uacbd\uc0ac\ud56d\uc744 \ubd84\uc11d\ud574 \ucf54\ub4dc \ub9ac\ubdf0 \ucf54\uba58\ud2b8\ub97c MR\uc5d0 \uc790\ub3d9 \ub4f1\ub85d\n\n**MR \ub313\uae00\uc5d0 `\ub9ac\ubdf0\ubd07\uc804\uccb4` \uc785\ub825 \uc2dc**\n\u2192 \uc989\uc2dc \uc804\uccb4 AI \ucf54\ub4dc \ub9ac\ubdf0 \uc7ac\uc2e4\ud589\n\n**\ud2b9\uc815 \ucf54\ub4dc \ub77c\uc778(DiffNote)\uc5d0 `\ub9ac\ubdf0\ubd07\uc774\uac83\ub9cc` \uc785\ub825 \uc2dc**\n\u2192 \ud574\ub2f9 \ud30c\uc77c\ub9cc \uc9d1\uc911 \ubd84\uc11d\ud574 \ud574\ub2f9 \ub313\uae00 \uc2a4\ub808\ub4dc\uc5d0 \ub2f5\uae00\ub85c \uc0c1\uc138 \ub9ac\ubdf0 \ub4f1\ub85d\n\n**\ub9ac\ubdf0 \uc81c\uc678 \uc870\uac74**\n\u2192 `master`, `release` \ube0c\ub79c\uce58 \ub300\uc0c1 MR\uc740 \uae30\ubcf8 \uc81c\uc678 (\ub300\ub7c9 diff \ubc29\uc9c0)\n\u2192 MR \uc124\uba85 \ub610\ub294 \ub313\uae00\uc5d0 `#force-review` \ud3ec\ud568 \uc2dc \uac15\uc81c \uc2e4\ud589\n\u2192 \uc774\ubbf8\uc9c0/\ubc14\uc774\ub108\ub9ac/node_modules \ub4f1\uc740 \uc790\ub3d9\uc73c\ub85c \ub9ac\ubdf0\uc5d0\uc11c \uc81c\uc678\n\n> \uc774 \uc6cc\ud06c\ud50c\ub85c\uc6b0\ub294 **ReviewBot Simple**, **ReviewBot Delicate** \ub450 \uc11c\ube0c \uc6cc\ud06c\ud50c\ub85c\uc6b0\ub97c \ud638\ucd9c\ud569\ub2c8\ub2e4\n> \uc138 \ud30c\uc77c\uc744 \ubaa8\ub450 import\ud55c \ud6c4 \uc5f0\uacb0\ud574\uc57c \ud569\ub2c8\ub2e4",
"height": 340,
"width": 480,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-480,
-1060
],
"id": "feature-guide-b-reviewbot-001",
"name": "Feature Guide Main"
}
],
"connections": {
"Webhook": {
"main": [
[
{
"node": "Check Event Type",
"type": "main",
"index": 0
}
]
]
},
"Check Event Type": {
"main": [
[
{
"node": "Filter OpenMR",
"type": "main",
"index": 0
}
],
[
{
"node": "Filter Comment - All",
"type": "main",
"index": 0
},
{
"node": "Filter Comment - DiffNote",
"type": "main",
"index": 0
}
]
]
},
"Filter Deployment": {
"main": [
[
{
"node": "Route Review Type",
"type": "main",
"index": 0
},
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Filter OpenMR": {
"main": [
[
{
"node": "setStatKey - mrAll",
"type": "main",
"index": 0
}
]
]
},
"Filter Comment - All": {
"main": [
[
{
"node": "setStatKey - commentAll",
"type": "main",
"index": 0
}
]
]
},
"setStatKey - mrAll": {
"main": [
[
{
"node": "Filter Deployment",
"type": "main",
"index": 0
}
]
]
},
"setStatKey - commentAll": {
"main": [
[
{
"node": "Filter Deployment",
"type": "main",
"index": 0
}
]
]
},
"Call Simple ReviewBot": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Send Noti",
"type": "main",
"index": 0
}
]
]
},
"Filter Comment - DiffNote": {
"main": [
[
{
"node": "setStatKey - commentDelicate",
"type": "main",
"index": 0
}
]
]
},
"Call Delicate ReviewBot": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"setStatKey - commentDelicate": {
"main": [
[
{
"node": "Filter Deployment",
"type": "main",
"index": 0
}
]
]
},
"Route Review Type": {
"main": [
[
{
"node": "Call Simple ReviewBot",
"type": "main",
"index": 0
}
],
[
{
"node": "Call Delicate ReviewBot",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"executionOrder": "v1",
"availableInMCP": false
},
"versionId": "b75bb7ea-fcc3-4275-a25e-d9642e483770",
"id": "rw_SEDuYoCG_GFVSTI08q",
"tags": []
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
B: ReviewBot 메인 컨트롤러. Uses httpRequest. Webhook trigger; 18 nodes.
Source: https://github.com/ssafy-project-coach/coach-session-15-n8n/blob/master/src/b-mr-review-bot/ReviewBot.json — 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.
Automate WhatsApp communication for recruitment agencies with an interactive, structured customer experience. This workflow handles pricing inquiries, request submissions, tracking, complaints, and hu
Hectelion | Evaluation d'entreprise. Uses googleDrive, httpRequest, microsoftOutlook, googleSheets. Webhook trigger; 64 nodes.
Hectelion | NDA. Uses googleSheets, googleDrive, httpRequest, microsoftOutlook. Webhook trigger; 50 nodes.
This template turns Podium's conversation inbox into a full sales CRM with a custom funnel, AI message classification, automated drip follow-ups, daily admin reports, and a live Kanban dashboard. Six
Suspicious_login_detection. Uses postgres, httpRequest, noOp, html. Webhook trigger; 43 nodes.