AutomationFlowsSlack & Telegram › Telegram Call Log → Telephone Sheet Update

Telegram Call Log → Telephone Sheet Update

Telegram Call Log → Telephone Sheet Update. Uses telegramTrigger, googleSheets, slack, telegram. Event-driven trigger; 11 nodes.

Event trigger★★★★☆ complexity11 nodesTelegram TriggerGoogle SheetsSlackTelegram
Slack & Telegram Trigger: Event Nodes: 11 Complexity: ★★★★☆ Added:

This workflow follows the Google Sheets → 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 →

Download .json
{
  "name": "Telegram Call Log \u2192 Telephone Sheet Update",
  "nodes": [
    {
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "id": "2a0e3a01-1111-4b01-9001-000000000001",
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "typeVersion": 1.1,
      "position": [
        200,
        300
      ],
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// Expected formats:\n//   \"<No.> <\u7d50\u679c>\"             e.g. \"3 \u30a2\u30dd\u7372\u5f97\"\n//   \"/log <No.> <\u7d50\u679c>\"\n//   \"<No.>:<\u7d50\u679c>\"\n// \u7d50\u679c keywords (case-insensitive):\n//   \u30a2\u30dd\u7372\u5f97 / \u30a2\u30dd / \u4e0d\u5728 / \u7559\u5b88 / \u62d2\u5426 / \u518d\u67b6\u96fb / \u756a\u53f7\u9055\u3044 / \u305d\u306e\u4ed6\n\nconst raw = ($json.message?.text || '').trim();\nconst stripped = raw.replace(/^\\/log\\s+/i, '').replace(/[\uff1a:]/g, ' ');\nconst match = stripped.match(/^\\s*(\\d+)\\s+(.+)$/s);\n\nif (!match) {\n  return [{\n    json: {\n      ok: false,\n      reason: 'parse_error',\n      raw,\n      hint: '\u4f7f\u3044\u65b9: \"<No.> <\u7d50\u679c>\" \u4f8b) 3 \u30a2\u30dd\u7372\u5f97',\n      reply_chat_id: $json.message.chat.id,\n      reply_message_id: $json.message.message_id,\n    },\n  }];\n}\n\nconst no = Number(match[1]);\nconst result = match[2].trim();\n\n// Map result keyword to next \u67b6\u96fb\u30b9\u30c6\u30fc\u30bf\u30b9\nconst statusMap = [\n  { re: /\u30a2\u30dd\u7372\u5f97|\u7372\u5f97|\u6210\u7d04/i, status: '\u30a2\u30dd\u7372\u5f97' },\n  { re: /\u30a2\u30dd($|[^\u7372])/i,       status: '\u30a2\u30dd\u4e88\u5b9a' },\n  { re: /\u4e0d\u5728|\u7559\u5b88/i,           status: '\u6b21\u56de\u67b6\u96fb\u4e88\u5b9a' },\n  { re: /\u62d2\u5426|\u65ad\u308a|NG/i,         status: '\u5bfe\u5fdc\u4e0d\u53ef' },\n  { re: /\u518d\u67b6\u96fb|\u518d\u96fb|\u6298\u308a\u8fd4\u3057/i, status: '\u6b21\u56de\u67b6\u96fb\u4e88\u5b9a' },\n  { re: /\u756a\u53f7\u9055\u3044|\u8aa4\u756a/i,        status: '\u756a\u53f7\u8aa4\u308a' },\n];\nconst nextStatus = (statusMap.find(s => s.re.test(result)) || { status: '\u67b6\u96fb\u6e08\u307f' }).status;\nconst isAppointment = /\u30a2\u30dd\u7372\u5f97|\u7372\u5f97|\u6210\u7d04/i.test(result);\n\nreturn [{\n  json: {\n    ok: true,\n    no,\n    result,\n    next_status: nextStatus,\n    is_appointment: isAppointment,\n    today: new Date().toISOString().slice(0, 10),\n    operator: $json.message.from.username || ($json.message.from.first_name || '') + ' ' + ($json.message.from.last_name || ''),\n    reply_chat_id: $json.message.chat.id,\n    reply_message_id: $json.message.message_id,\n  },\n}];"
      },
      "id": "2a0e3a01-2222-4b02-9002-000000000002",
      "name": "Parse Command",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        420,
        300
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "ok",
              "leftValue": "={{ $json.ok }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "2a0e3a01-3333-4b03-9003-000000000003",
      "name": "Parse OK?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        640,
        300
      ]
    },
    {
      "parameters": {
        "operation": "lookup",
        "documentId": {
          "__rl": true,
          "value": "REPLACE_WITH_GOOGLE_SHEET_ID",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": "\u30c6\u30ec\u30a2\u30dd\u7ba1\u7406\u30b7\u30fc\u30c8",
          "mode": "name"
        },
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "No.",
              "lookupValue": "={{ $json.no }}"
            }
          ]
        },
        "options": {
          "returnAllMatches": false
        }
      },
      "id": "2a0e3a01-4444-4b04-9004-000000000004",
      "name": "Lookup Row by No.",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        880,
        200
      ],
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const row = $json;\nconst input = $('Parse Command').item.json;\n\nlet slot = 0;\nfor (let i = 1; i <= 3; i++) {\n  const v = row[`\u67b6\u96fb\u65e5${i}`];\n  if (v === undefined || v === null || String(v).trim() === '') {\n    slot = i;\n    break;\n  }\n}\n\nif (slot === 0) {\n  return [{\n    json: {\n      ok: false,\n      reason: 'no_slot',\n      no: input.no,\n      message: `No.${input.no} \u306f\u65e2\u306b3\u56de\u67b6\u96fb\u6e08\u307f\u3067\u3059\u3002\u624b\u52d5\u3067\u66f4\u65b0\u3057\u3066\u304f\u3060\u3055\u3044\u3002`,\n      reply_chat_id: input.reply_chat_id,\n      reply_message_id: input.reply_message_id,\n    },\n  }];\n}\n\nreturn [{\n  json: {\n    ok: true,\n    slot,\n    row_no: row['No.'],\n    name: row['\u304a\u540d\u524d'],\n    phone: row['\u96fb\u8a71\u756a\u53f7'],\n    next_status: input.next_status,\n    result: input.result,\n    today: input.today,\n    operator: input.operator,\n    is_appointment: input.is_appointment,\n    reply_chat_id: input.reply_chat_id,\n    reply_message_id: input.reply_message_id,\n  },\n}];"
      },
      "id": "2a0e3a01-5555-4b05-9005-000000000005",
      "name": "Pick Empty Slot",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1120,
        200
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "slotok",
              "leftValue": "={{ $json.ok }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "2a0e3a01-6666-4b06-9006-000000000006",
      "name": "Slot OK?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1340,
        200
      ]
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "value": "REPLACE_WITH_GOOGLE_SHEET_ID",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": "\u30c6\u30ec\u30a2\u30dd\u7ba1\u7406\u30b7\u30fc\u30c8",
          "mode": "name"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "No.": "={{ $json.row_no }}",
            "\u67b6\u96fb\u30b9\u30c6\u30fc\u30bf\u30b9": "={{ $json.next_status }}",
            "\u67b6\u96fb\u65e5{{ $json.slot }}": "={{ $json.today }}",
            "\u67b6\u96fb\u7d50\u679c{{ $json.slot }}": "={{ $json.result }} ({{ $json.operator }})"
          },
          "matchingColumns": [
            "No."
          ],
          "schema": [
            {
              "id": "No.",
              "displayName": "No.",
              "required": true,
              "defaultMatch": true,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "\u67b6\u96fb\u30b9\u30c6\u30fc\u30bf\u30b9",
              "displayName": "\u67b6\u96fb\u30b9\u30c6\u30fc\u30bf\u30b9",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": false
            },
            {
              "id": "\u67b6\u96fb\u65e51",
              "displayName": "\u67b6\u96fb\u65e51",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": false
            },
            {
              "id": "\u67b6\u96fb\u7d50\u679c1",
              "displayName": "\u67b6\u96fb\u7d50\u679c1",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": false
            },
            {
              "id": "\u67b6\u96fb\u65e52",
              "displayName": "\u67b6\u96fb\u65e52",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": false
            },
            {
              "id": "\u67b6\u96fb\u7d50\u679c2",
              "displayName": "\u67b6\u96fb\u7d50\u679c2",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": false
            },
            {
              "id": "\u67b6\u96fb\u65e53",
              "displayName": "\u67b6\u96fb\u65e53",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": false
            },
            {
              "id": "\u67b6\u96fb\u7d50\u679c3",
              "displayName": "\u67b6\u96fb\u7d50\u679c3",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": false
            }
          ]
        },
        "options": {}
      },
      "id": "2a0e3a01-7777-4b07-9007-000000000007",
      "name": "Update Sheet Row",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        1580,
        120
      ],
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "appt",
              "leftValue": "={{ $('Pick Empty Slot').item.json.is_appointment }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "2a0e3a01-8888-4b08-9008-000000000008",
      "name": "Is Appointment?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1820,
        120
      ]
    },
    {
      "parameters": {
        "authentication": "oAuth2",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "value": "REPLACE_WITH_SLACK_CHANNEL_ID",
          "mode": "id"
        },
        "text": "=:tada: *\u30a2\u30dd\u7372\u5f97!*\n*No.{{ $('Pick Empty Slot').item.json.row_no }}* {{ $('Pick Empty Slot').item.json.name }} ({{ $('Pick Empty Slot').item.json.phone }})\n*\u62c5\u5f53:* {{ $('Pick Empty Slot').item.json.operator }}\n*\u7d50\u679c:* {{ $('Pick Empty Slot').item.json.result }}\n*\u65e5\u4ed8:* {{ $('Pick Empty Slot').item.json.today }}",
        "otherOptions": {
          "mrkdwn": true
        }
      },
      "id": "2a0e3a01-9999-4b09-9009-000000000009",
      "name": "Slack: Appointment",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.3,
      "position": [
        2060,
        60
      ],
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "chatId": "={{ $('Pick Empty Slot').item.json.reply_chat_id }}",
        "text": "=:white_check_mark: \u8a18\u9332\u3057\u307e\u3057\u305f\nNo.{{ $('Pick Empty Slot').item.json.row_no }} {{ $('Pick Empty Slot').item.json.name }}\n\u67b6\u96fb{{ $('Pick Empty Slot').item.json.slot }}: {{ $('Pick Empty Slot').item.json.result }}\n\u30b9\u30c6\u30fc\u30bf\u30b9: {{ $('Pick Empty Slot').item.json.next_status }}",
        "additionalFields": {
          "reply_to_message_id": "={{ $('Pick Empty Slot').item.json.reply_message_id }}"
        }
      },
      "id": "2a0e3a01-aaaa-4b0a-900a-00000000000a",
      "name": "Telegram: Confirm",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        2300,
        120
      ],
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "chatId": "={{ $json.reply_chat_id }}",
        "text": "=:warning: \u30d1\u30fc\u30b9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\n{{ $json.hint || $json.message || '\u4e0d\u660e\u306a\u30a8\u30e9\u30fc' }}",
        "additionalFields": {
          "reply_to_message_id": "={{ $json.reply_message_id }}"
        }
      },
      "id": "2a0e3a01-bbbb-4b0b-900b-00000000000b",
      "name": "Telegram: Error",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        880,
        460
      ],
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Telegram Trigger": {
      "main": [
        [
          {
            "node": "Parse Command",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Command": {
      "main": [
        [
          {
            "node": "Parse OK?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse OK?": {
      "main": [
        [
          {
            "node": "Lookup Row by No.",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Telegram: Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Lookup Row by No.": {
      "main": [
        [
          {
            "node": "Pick Empty Slot",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pick Empty Slot": {
      "main": [
        [
          {
            "node": "Slot OK?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slot OK?": {
      "main": [
        [
          {
            "node": "Update Sheet Row",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Telegram: Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Sheet Row": {
      "main": [
        [
          {
            "node": "Is Appointment?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Appointment?": {
      "main": [
        [
          {
            "node": "Slack: Appointment",
            "type": "main",
            "index": 0
          },
          {
            "node": "Telegram: Confirm",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Telegram: Confirm",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "staticData": null,
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "tags": [
    {
      "name": "telegram"
    },
    {
      "name": "sheets"
    },
    {
      "name": "telephone-sales"
    }
  ]
}

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

Telegram Call Log → Telephone Sheet Update. Uses telegramTrigger, googleSheets, slack, telegram. Event-driven trigger; 11 nodes.

Source: https://github.com/hasegawa212/-/blob/ba99cb352c71665d658ee38217764d9df1096b56/n8n-workflows/telegram-call-log-to-sheet.json — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

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

Slack & Telegram

Vendorbot Form Filler. Uses executeCommand, gmail, telegram, slack. Event-driven trigger; 39 nodes.

Execute Command, Gmail, Telegram +6
Slack & Telegram

This workflow provides a complete solution for handling Telegram Stars payments, invoicing and refunds using n8n. It automates the process of sending invoices, managing pre-checkout approvals, recordi

HTTP Request, Execute Workflow Trigger, Google Sheets +2
Slack & Telegram

clients kept booking meetings during my prayer times. i'd either miss a prayer or scramble to reschedule. the problem wasn't the clients — it was that my calendar had no blocked windows for salah. i n

Telegram Trigger, HTTP Request, Google Calendar +3
Slack & Telegram

This workflow is a powerful reputation management tool designed to proactively filter customer reviews. It helps you encourage positive reviews on Google while capturing negative feedback privately be

Telegram Trigger, Google Sheets, Telegram
Slack & Telegram

This workflow is designed to automate your e-commerce order processing by instantly syncing new Jotform submissions with your internal systems and immediately notifying the customer on Telegram.

Jot Form Trigger, Telegram, Data Table +3