AutomationFlowsAI & RAG › Socbot Kci

Socbot Kci

socbot-kci. Uses lmChatGroq, googleSheets, agent, chatTrigger. Chat trigger; 5 nodes.

Chat trigger trigger★★☆☆☆ complexityAI-powered5 nodesGroq ChatGoogle SheetsAgentChat Trigger
AI & RAG Trigger: Chat trigger Nodes: 5 Complexity: ★★☆☆☆ AI nodes: yes Added:

This workflow follows the Agent → Chat Trigger 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 →

Download .json
{
  "name": "socbot-kci",
  "nodes": [
    {
      "parameters": {
        "model": "llama-3.1-8b-instant",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "typeVersion": 1,
      "position": [
        368,
        144
      ],
      "id": "17426c65-dc9b-4261-86c2-a178a547980d",
      "name": "Groq Chat Model",
      "credentials": {
        "groqApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "1HrzNfF4I63er1Y5OZKTq1VKf3LSvAOL6P0MRElTfpkQ",
          "mode": "list",
          "cachedResultName": "Record KCI Lanjutan",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1HrzNfF4I63er1Y5OZKTq1VKf3LSvAOL6P0MRElTfpkQ/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": 861278613,
          "mode": "list",
          "cachedResultName": "April 2026 Stellar",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1HrzNfF4I63er1Y5OZKTq1VKf3LSvAOL6P0MRElTfpkQ/edit#gid=861278613"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Alarms Name": "={{ $json.Alarms_Name }}",
            "Exploit Signature": "={{ $json.Exploit_Signatre }}",
            "Case ID": "={{ $json.Case_ID }}",
            "Action": "={{ $json.Action }}",
            "Event Date": "={{ $json.Event_Date }}",
            "Event Time": "={{ $json.Event_Time }}",
            "Ticket Date & Time": "={{ $json.Ticket_Date_Time }}",
            "Status Ticketing": "={{ $json.Status_Ticketing }}",
            "Severity": "={{ $json.Severirty }}",
            "IP Source": "={{ $json.IP_Source }}",
            "Country Code IP Source": "={{ $json.Country_Code_IP_Source }}",
            "Source IP Reputations": "={{ $json.Source_IP_Reputations }}",
            "Source Port": "={{ $json.Source_Port }}",
            "Stage": "={{ $json.Stage }}",
            "Tactic": "={{ $json.Tactic }}",
            "Technique": "={{ $json.Technique }}",
            "MAC Address": "-",
            "DNS & Resolve IP": "-",
            "Source Host": "={{ $json.Source_Host }}",
            "Dst Host": "={{ $json.Dst_Host }}",
            "IP Destination": "={{ $json.IP_Destination }}",
            "Country Code IP Destination": "={{ $json.Country_Code_IP_Destination }}",
            "Destination Port": "={{ $json.Destination_Port }}",
            "Destination IP Reputations": "={{ $json.Destination_IP_Reputations }}",
            "Threat Category": "={{ $json.Threat_Category }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "No.",
              "displayName": "No.",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Alarms Name",
              "displayName": "Alarms Name",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Exploit Signature",
              "displayName": "Exploit Signature",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Created By",
              "displayName": "Created By",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Case ID",
              "displayName": "Case ID",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "No.tiket",
              "displayName": "No.tiket",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Action",
              "displayName": "Action",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Event Date",
              "displayName": "Event Date",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Event Time",
              "displayName": "Event Time",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Ticket Date & Time",
              "displayName": "Ticket Date & Time",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "SOC Response Time",
              "displayName": "SOC Response Time",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Time Resolution ",
              "displayName": "Time Resolution ",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Status Ticketing",
              "displayName": "Status Ticketing",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Reason",
              "displayName": "Reason",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Severity",
              "displayName": "Severity",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "IP Source",
              "displayName": "IP Source",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Country Code IP Source",
              "displayName": "Country Code IP Source",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Source IP Reputations",
              "displayName": "Source IP Reputations",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Source Port",
              "displayName": "Source Port",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Stage",
              "displayName": "Stage",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Tactic",
              "displayName": "Tactic",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Technique",
              "displayName": "Technique",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "MAC Address",
              "displayName": "MAC Address",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "DNS & Resolve IP",
              "displayName": "DNS & Resolve IP",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Source Host",
              "displayName": "Source Host",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Dst Host",
              "displayName": "Dst Host",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "IP Destination",
              "displayName": "IP Destination",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Country Code IP Destination",
              "displayName": "Country Code IP Destination",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Destination Port",
              "displayName": "Destination Port",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Destination IP Reputations",
              "displayName": "Destination IP Reputations",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Threat Category",
              "displayName": "Threat Category",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Number Failed",
              "displayName": "Number Failed",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Number Successfull",
              "displayName": "Number Successfull",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Actual",
              "displayName": "Actual",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Typical",
              "displayName": "Typical",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Request Username",
              "displayName": "Request Username",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Request Password",
              "displayName": "Request Password",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Metadata CVE",
              "displayName": "Metadata CVE",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        880,
        -80
      ],
      "id": "335a93f8-7d47-444d-a8e3-be740f319e97",
      "name": "Append row in sheet",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "2ea1040b-d315-4d90-b7fc-aa049cc85d2d",
              "name": "Alarms_Name",
              "value": "={{ JSON.parse($json.output).Alarms_Name }}",
              "type": "string"
            },
            {
              "id": "01a18d49-1825-4620-a7a5-49c3e4e47c14",
              "name": "Exploit_Signatre",
              "value": "={{ JSON.parse($json.output).Exploit_Signature }}",
              "type": "string"
            },
            {
              "id": "f75ecd85-3a76-4889-a2e7-512362ef2f3d",
              "name": "Case_ID",
              "value": "={{ JSON.parse($json.output).Case_ID }}",
              "type": "string"
            },
            {
              "id": "0c9471a5-ad14-4200-aabc-f86ff9eb16dd",
              "name": "Action",
              "value": "={{ JSON.parse($json.output).Action }}",
              "type": "string"
            },
            {
              "id": "390d0bb4-d6fc-4e97-a6ef-1860c5c67667",
              "name": "Event_Date",
              "value": "={{ JSON.parse($json.output).Event_Date }}",
              "type": "string"
            },
            {
              "id": "fd822997-0a45-4ce2-93c0-115eb19fc281",
              "name": "Event_Time",
              "value": "={{ JSON.parse($json.output).Event_Time }}",
              "type": "string"
            },
            {
              "id": "f227b7a3-f355-4878-9e35-aa01198a72f4",
              "name": "Ticket_Date_Time",
              "value": "={{ JSON.parse($json.output).Ticket_Date_Time }}",
              "type": "string"
            },
            {
              "id": "b1dd0603-ccf3-49c6-b7d3-ef80722a3ccf",
              "name": "Status_Ticketing",
              "value": "={{ JSON.parse($json.output).Status_Ticketing }}",
              "type": "string"
            },
            {
              "id": "6f3251ed-1c22-4d1a-813b-88ad2382e1d6",
              "name": "Severirty",
              "value": "={{ JSON.parse($json.output).Severity }}",
              "type": "string"
            },
            {
              "id": "7fe5c215-c5f2-427a-9352-61c0a5026498",
              "name": "IP_Source",
              "value": "={{ JSON.parse($json.output).IP_Source }}",
              "type": "string"
            },
            {
              "id": "0b23c3f6-15d2-4252-8c4c-30723f7b2b6b",
              "name": "Country_Code_IP_Source",
              "value": "={{ JSON.parse($json.output).Country_Code_IP_Source }}",
              "type": "string"
            },
            {
              "id": "71518567-4c56-4958-8ea2-76be0882236e",
              "name": "Source_IP_Reputations",
              "value": "={{ JSON.parse($json.output).Source_IP_Reputations }}",
              "type": "string"
            },
            {
              "id": "f3a4ed4b-6839-4630-9f19-09a77676ba35",
              "name": "Source_Port",
              "value": "={{ JSON.parse($json.output).Source_Port }}",
              "type": "string"
            },
            {
              "id": "dc6e8a69-3985-4033-adcd-f05146c6c277",
              "name": "Stage",
              "value": "={{ JSON.parse($json.output).Stage }}",
              "type": "string"
            },
            {
              "id": "540eec6f-ff59-4791-b648-b3d627a3b5e7",
              "name": "Tactic",
              "value": "={{ JSON.parse($json.output).Tactic }}",
              "type": "string"
            },
            {
              "id": "d2ec7c03-6110-42d9-b53e-c6bf5984286e",
              "name": "Technique",
              "value": "={{ JSON.parse($json.output).Technique }}",
              "type": "string"
            },
            {
              "id": "060e3b7d-e769-465f-a137-361625fa2052",
              "name": "Source_Host",
              "value": "={{ JSON.parse($json.output).Source_Host }}",
              "type": "string"
            },
            {
              "id": "ece1b483-0473-486d-a1a5-0024b36a217c",
              "name": "Dst_Host",
              "value": "={{ JSON.parse($json.output).Dst_Host}}",
              "type": "string"
            },
            {
              "id": "32cfe74d-5532-42ba-a559-69967ee3e14f",
              "name": "IP_Destination",
              "value": "={{ JSON.parse($json.output).IP_Destination }}",
              "type": "string"
            },
            {
              "id": "f572cb29-a847-46ef-bdaa-89db31a17b5c",
              "name": "Country_Code_IP_Destination",
              "value": "={{ JSON.parse($json.output).Country_Code_IP_Destination }}",
              "type": "string"
            },
            {
              "id": "9e4b23a2-44c7-4699-bd0f-aeab03786891",
              "name": "Destination_Port",
              "value": "={{ JSON.parse($json.output).Destination_Port }}",
              "type": "string"
            },
            {
              "id": "6a63cfd3-feb1-443e-a8e3-9cbccf9b16e3",
              "name": "Destination_IP_Reputations",
              "value": "={{ JSON.parse($json.output).Destination_IP_Reputations }}",
              "type": "string"
            },
            {
              "id": "e51ebf44-0c67-4547-b036-2949d10da949",
              "name": "Threat_Category",
              "value": "={{ JSON.parse($json.output).Threat_Category }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        672,
        -80
      ],
      "id": "6700f336-79de-494d-a875-568649b77edd",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "options": {
          "systemMessage": "Anda adalah asisten SOC Expert. Tugas utama Anda adalah mengekstrak data dari Laporan Insiden Keamanan ke dalam format JSON murni.\n\nATURAN UTAMA:\n1. JANGAN memberikan teks pengantar (seperti \"Berikut datanya...\") atau penutup. \n2. OUTPUT HARUS berupa objek JSON tunggal yang valid.\n3. Jika data tidak ditemukan pada teks laporan, isi dengan nilai default \"-\".\n4. JANGAN melakukan halusinasi data; ambil hanya dari teks yang disediakan.\n\nINSTRUKSI EKSTRAKSI FIELD:\n- Alarms_Name: Ekstrak dari field 'Security Event'.\n- Exploit_Signature: Ekstrak dari 'Signature'. Jika kosong, isi \"-\".\n- Case_ID: Ekstrak dari 'Case ID'.\n- Event_Date: Konversi 'Waktu Deteksi' (YYYY-MM-DD) menjadi format \"D-MMM-YY\" (Contoh: 7-Apr-26).\n- Event_Time: Ambil HH:mm dari 'Waktu Deteksi' (Contoh: 00:15).\n- Ticket_Date_Time: Gunakan nilai yang sama dengan 'Event_Date' (D-MMM-YY).\n- Action: Ambil deskripsi tindakan dari bagian 'Action' Jika sudah di block maka isi (Block Stellar).\n- Status_Ticketing: Ambil dari 'Status Event' atau 'State'.\n- Severity: Ambil dari 'Severity'.\n- IP_Source: Ambil alamat IP saja dari 'Source IP'.\n- Country_Code_IP_Source: Ambil nama negara di dalam kurung pada field 'Source IP' namanya saja tidak perlu dengan kurungnya.\n- Source_IP_Reputations: Ambil dari 'Source Reputation'.\n- Source_Port: Ambil dari 'Source Port'.\n- Stage : Ambil dari 'Stage'.\n- Tactic : Ambil dari 'Tactic'.\n- Technique : Ambil dari 'Technique'.\n- Source_Host: Ambil dari 'Source Host'.\n- Dst_Host: Ambil dari 'Destination Host'.\n- IP_Destination: Ambil alamat IP saja dari 'Destination IP'.\n- Country_Code_IP_Destination: Ambil nama negara/label di dalam kurung pada field 'Destination IP' namanya saja tidak perlu dengan kurungnya.\n- Destination_Port: Ambil dari 'Dst port'.\n- Destination_IP_Reputations: Ambil dari 'Destination Reputation'.\n- Threat_Category: Ambil dari 'Threat Category'.\n\nSTRUKTUR OUTPUT JSON:\n{\n  \"Alarms_Name\": \"\",\n  \"Exploit_Signature\": \"\",\n  \"Case_ID\": \"\",\n  \"Action\": \"\",\n  \"Event_Date\": \"\",\n  \"Event_Time\": \"\",\n  \"Ticket_Date_Time\": \"\",\n  \"Status_Ticketing\": \"\",\n  \"Severity\": \"\",\n  \"IP_Source\": \"\",\n  \"Country_Code_IP_Source\": \"\",\n  \"Source_IP_Reputations\": \"\",\n  \"Source_Port\": \"\",\n  \"Stage\": \"\",\n  \"Tactic\": \"\",\n  \"Technique\": \"\",\n  \"Source_Host\": \"\",\n  \"Dst_Host\": \"\",\n  \"IP_Destination\": \"\",\n  \"Country_Code_IP_Destination\": \"\",\n  \"Destination_Port\": \"\",\n  \"Destination_IP_Reputations\": \"\",\n  \"Threat_Category\": \"\"\n}"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        368,
        -80
      ],
      "id": "f197bc5c-8e9c-42c7-bc45-487adb21f6bb",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "public": true,
        "initialMessages": "Hallo dari socbot! \ud83d\udc4b\n\nSelamat bekerja, Rekan SOC. Masukkan data terkait insiden di lingkungan KCI untuk otomatisasi record.",
        "availableInChat": true,
        "agentIcon": {
          "type": "emoji",
          "value": "\ud83d\ude80"
        },
        "agentName": "socbot",
        "options": {
          "inputPlaceholder": "Masukan bagian datanya saja...",
          "subtitle": "Automated Incident Reporting System by @Nicky Fajaelani",
          "title": "socbot \n Kereta Commuter Indonesia",
          "customCss": ":root {\n  /* Colors - Tema Commuterline KCI */\n  --chat--color--primary: #E30613; /* Merah KCI */\n  --chat--color--primary-shade-50: #C20510;\n  --chat--color--primary--shade-100: #8C040C;\n  --chat--color--secondary: #0B2F5C; /* Biru Gelap Corporate */\n  --chat--color-secondary-shade-50: #144480;\n  --chat--color-white: #ffffff;\n  --chat--color-light: #F4F6F8;\n  --chat--color-light-shade-50: #E2E8F0;\n  --chat--color-light-shade-100: #CBD5E1;\n  --chat--color-medium: #94A3B8;\n  --chat--color-dark: #111827;\n  --chat--color-disabled: #CBD5E1;\n  --chat--color-typing: #F58220;\n\n  /* Base Layout */\n  --chat--spacing: 1rem;\n  --chat--border-radius: 0.5rem;\n  --chat--transition-duration: 0.15s;\n  --chat--font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;\n\n  /* Window Dimensions */\n  --chat--window--width: 420px;\n  --chat--window--height: 600px;\n  --chat--window--bottom: var(--chat--spacing);\n  --chat--window--right: var(--chat--spacing);\n  --chat--window--z-index: 9999;\n  --chat--window--border: 1px solid var(--chat--color-light-shade-100);\n  --chat--window--border-radius: 0.5rem;\n  --chat--window--margin-bottom: var(--chat--spacing);\n\n  /* Header Styles */\n  --chat--header-height: auto;\n  --chat--header--padding: 1.2rem var(--chat--spacing);\n  --chat--header--background: var(--chat--color-dark);\n  --chat--header--color: var(--chat--color-white);\n  --chat--header--border-top: none;\n  --chat--header--border-bottom: none; /* Dihapus agar digantikan seutuhnya oleh garis custom di bawah */\n  --chat--header--border-left: none;\n  --chat--header--border-right: none;\n  --chat--heading--font-size: 1.25em;\n  --chat--subtitle--font-size: 0.9em;\n  --chat--subtitle--line-height: 1.5;\n\n  /* Message Styles */\n  --chat--message--font-size: 0.95rem;\n  --chat--message--padding: 0.8rem 1rem;\n  --chat--message--border-radius: 0.5rem;\n  --chat--message-line-height: 1.5;\n  --chat--message--margin-bottom: calc(var(--chat--spacing) * 0.8);\n  --chat--message--bot--background: var(--chat--color-white);\n  --chat--message--bot--color: var(--chat--color-dark);\n  --chat--message--bot--border: 1px solid var(--chat--color-light-shade-50);\n  --chat--message--user--background: var(--chat--color--secondary);\n  --chat--message--user--color: var(--chat--color-white);\n  --chat--message--user--border: none;\n  --chat--message--pre--background: #F8FAFC;\n  --chat--messages-list--padding: var(--chat--spacing);\n\n  /* Toggle Button */\n  --chat--toggle--size: 64px;\n  --chat--toggle--width: var(--chat--toggle--size);\n  --chat--toggle--height: var(--chat--toggle--size);\n  --chat--toggle--border-radius: 50%;\n  --chat--toggle--background: var(--chat--color--primary);\n  --chat--toggle--hover--background: var(--chat--color--primary-shade-50);\n  --chat--toggle--active--background: var(--chat--color--primary--shade-100);\n  --chat--toggle--color: var(--chat--color-white);\n\n  /* Input Area */\n  --chat--textarea--height: 50px;\n  --chat--textarea--max-height: 30rem;\n  --chat--input--font-size: 0.95rem;\n  --chat--input--border: 1px solid var(--chat--color-light-shade-50);\n  --chat--input--border-radius: 0.5rem;\n  --chat--input--padding: 0.8rem;\n  --chat--input--background: var(--chat--color-white);\n  --chat--input--text-color: var(--chat--color-dark);\n  --chat--input--line-height: 1.5;\n  --chat--input--placeholder--font-size: var(--chat--input--font-size);\n  --chat--input--border-active: 1px solid var(--chat--color--primary);\n  --chat--input--left--panel--width: 2rem;\n\n  /* Button Styles */\n  --chat--button--padding: calc(var(--chat--spacing) * 5 / 8) var(--chat--spacing);\n  --chat--button--border-radius: var(--chat--border-radius);\n  --chat--button--font-size: 1rem;\n  --chat--button--line-height: 1;\n  \n  --chat--button--color--primary: var(--chat--color-white);\n  --chat--button--background--primary: var(--chat--color--primary);\n  --chat--button--border--primary: none;\n  --chat--button--color--primary--hover: var(--chat--color-white);\n  --chat--button--background--primary--hover: var(--chat--color--primary-shade-50);\n  --chat--button--border--primary--hover: none;\n  --chat--button--color--primary--disabled: var(--chat--color-light);\n  --chat--button--background--primary--disabled: var(--chat--color-light-shade-100);\n  --chat--button--border--primary--disabled: none;\n  \n  --chat--button--color--secondary: var(--chat--color-white);\n  --chat--button--background--secondary: var(--chat--color--secondary);\n  --chat--button--border--secondary: none;\n  --chat--button--color--secondary--hover: var(--chat--color-white);\n  --chat--button--background--secondary--hover: var(--chat--color-secondary-shade-50);\n  --chat--button--border--secondary--hover: none;\n  --chat--button--color--secondary--disabled: var(--chat--color-white);\n  --chat--button--background--secondary--disabled: var(--chat--color-light-shade-100);\n  --chat--button--border--secondary--disabled: none;\n  --chat--close--button--color-hover: #F58220; \n\n  /* Send and File Buttons */\n  --chat--input--send--button--background: var(--chat--color--primary);\n  --chat--input--send--button--color: var(--chat--color-white);\n  --chat--input--send--button--background-hover: var(--chat--color--primary-shade-50);\n  --chat--input--send--button--color-hover: var(--chat--color-white);\n  \n  --chat--input--file--button--background: var(--chat--color-light);\n  --chat--input--file--button--color: var(--chat--color--secondary);\n  --chat--input--file--button--background-hover: var(--chat--color-light-shade-50);\n  --chat--input--file--button--color-hover: var(--chat--color--secondary);\n  --chat--files-spacing: 0.25rem;\n\n  /* Body and Footer */\n  --chat--body--background: var(--chat--color-light);\n  --chat--footer--background: var(--chat--color-white);\n  --chat--footer--color: var(--chat--color-dark);\n}\n\n/* =========================================\n   OVERRIDES & CUSTOM KCI \"TRAIN TOUCHES\"\n   ========================================= */\n\n.chat-message {\n\tmax-width: 85%;\n    box-shadow: 0 1px 2px rgba(0,0,0,0.05);\n}\n\n.chat-message.bot {\n    border-left: 4px solid #E30613 !important;\n    border-radius: 0.2rem 0.5rem 0.5rem 0.2rem; \n}\n\n/* 3. Striping Livery KRL (Merah, Oranye, Kuning) di bagian bawah Header */\n.chat-header {\n    position: relative;\n    border-bottom: none !important; /* Memastikan tidak ada bentrok border */\n}\n\n.chat-header::after {\n    content: '';\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 8px; /* <<< DIPERTEBAL (sebelumnya 4px) */\n    width: 100%;\n    /* Merah mendominasi, diikuti Oranye, lalu Kuning cerah di ujung kanan */\n    background: linear-gradient(90deg, #E30613 0%, #E30613 65%, #F58220 65%, #F58220 85%, #FFD700 85%, #FFD700 100%);\n}\n\n.chat-input textarea {\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 0.9rem;\n}\n\n"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.4,
      "position": [
        144,
        -80
      ],
      "id": "b2630797-008e-48e2-9844-d7d00fcbfbda",
      "name": "When chat message received"
    }
  ],
  "connections": {
    "Groq Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Append row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate",
    "availableInMCP": false
  },
  "versionId": "60e6411a-8736-48f3-89aa-5f9efa9cf8fb",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "SgifTd0s47dicbuX",
  "tags": []
}

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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

socbot-kci. Uses lmChatGroq, googleSheets, agent, chatTrigger. Chat trigger; 5 nodes.

Source: https://github.com/NickyFajaelani525/socbot/blob/61e6701039f15688cf9c4c424eb2c10a05218c61/socbot-kci.json — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

reporting soc. Uses lmChatGroq, googleSheets, chatTrigger, agent. Chat trigger; 5 nodes.

Groq Chat, Google Sheets, Chat Trigger +1
AI & RAG

teste. Uses chatTrigger, agent, lmChatGroq, memoryBufferWindow. Chat trigger; 24 nodes.

Chat Trigger, Agent, Groq Chat +7
AI & RAG

pix-zap. Uses chatTrigger, agent, toolCalculator, toolWikipedia. Chat trigger; 21 nodes.

Chat Trigger, Agent, Tool Calculator +7
AI & RAG

📌 Overview This workflow automates end-to-end appointment scheduling for your business using an AI-powered chatbot. Clients can book, reschedule, or cancel meetings through a simple chat interface — n

Chat Trigger, Agent, Groq Chat +6
AI & RAG

Case 1. Uses chatTrigger, googleSheets, agent, lmChatGroq. Chat trigger; 9 nodes.

Chat Trigger, Google Sheets, Agent +4