{
  "id": "Jd7X52ywyO4xTZoE",
  "meta": {
    "templateId": "2465",
    "templateCredsSetupCompleted": true
  },
  "name": "\ud83c\udf99\ufe0f VoiceScribe AI: Telegram Audio Message Auto Transcription with OpenAI Whisper",
  "tags": [
    {
      "id": "84SlSTthTSHRbFGM",
      "name": "Telegram",
      "createdAt": "2025-08-05T06:23:21.764Z",
      "updatedAt": "2025-08-05T06:23:21.764Z"
    },
    {
      "id": "nyc9wEV6N1lqPyOk",
      "name": "Operations",
      "createdAt": "2025-08-07T05:47:09.931Z",
      "updatedAt": "2025-08-07T05:47:09.931Z"
    },
    {
      "id": "ow6eIe95VK6fRkyw",
      "name": "Chatbot",
      "createdAt": "2025-08-05T06:23:11.231Z",
      "updatedAt": "2025-08-05T06:23:11.231Z"
    }
  ],
  "nodes": [
    {
      "id": "638b4ba9-c381-44d4-9245-c5d4964371f7",
      "name": "Un-supported message type",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1312,
        2480
      ],
      "parameters": {
        "text": "=Sorry, I can\u2019t read your input right now.\nPlease send me a voice message, and I\u2019ll help you transcribe and track it! \ud83c\udf99\ufe0f\ud83d\udcac",
        "chatId": "={{ $('Telegram Voice Message Trigger').item.json.message.chat.id }}",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "779f89de-cf46-467c-829e-48ef902f2e88",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -800,
        1648
      ],
      "parameters": {
        "width": 1232,
        "height": 2032,
        "content": "# \ud83c\udf99\ufe0f VoiceScribe AI: Telegram Audio Message Auto Transcription with OpenAI Whisper\n> Automatically transcribe Telegram voice messages and store them as structured logs in Google Sheets, while backing up the audio in Google Drive.\n\n## \ud83e\uddd1\u200d\ud83d\udcbc Who\u2019s it for\n\n- Journalists, content creators, or busy professionals who often record voice memos or short interviews on the go.\n- Anyone who wants to turn voice recordings into searchable, structured notes.\n\n## \u2699\ufe0f How it works / What it does\n\n1. User sends a voice message to a Telegram bot.\n2. n8n checks if the message is an audio voice note.\n3. If valid, it downloads the audio file and:\n   - Transcribes it using OpenAI Whisper (or your LLM of choice).\n   - Uploads the original audio to Google Drive for safekeeping.\n4. The transcript and audio metadata are merged.\n5. The workflow:\n   - Logs the data into a Google Sheet.\n   - Sends a formatted confirmation message to the user via Telegram.\n\nIf the input is not audio, the bot politely informs the user that only voice messages are accepted.\n\n## \u2705 Features\n\n- Accepts only Telegram voice messages.\n- Transcribes via OpenAI Whisper.\n- Logs DateTime, Duration, Transcript, and Audio URL to Google Sheets.\n- Sends user feedback message via Telegram with download + transcript link.\n\n## \ud83d\ude80 How to set up\n### Prerequisites\n\n- Telegram Bot connected to n8n (via Telegram Trigger)\n- Google Drive & Google Sheets credentials configured\n- OpenAI or Whisper API credentials (for transcription)\n\n### Steps\n\n1. **Telegram Trigger**  \n   Start the flow when a new message is sent to your bot.\n2. **Check Message Type**  \n   Use a conditional node to confirm it's a voice message.\n3. **Download Voice Message**  \n   Download the `.oga` file from Telegram.\n4. **Transcribe Audio**  \n   Send the binary audio to OpenAI Whisper or your transcription service.\n5. **Upload to Google Drive**  \n   Backup the original audio file.\n6. **Merge Outputs**  \n   Combine transcription with Drive metadata.\n7. **Transform to Row Format**  \n   Prepare structured JSON for Google Sheets.\n8. **Append to Google Sheet**  \n   Store the transcript log (DateTime, Duration, Transcript, AudioURL).\n9. **Send Confirmation to User**  \n   Inform the user via Telegram with their transcript and download link.\n10. **Unsupported Message Handler**  \n    Reply to users who send non-audio messages.\n\n## \ud83d\udcc4 Example Output in Google Sheet\n\n| DateTime              | Duration | Transcript                                | AudioURL                                                   |\n|-----------------------|----------|--------------------------------------------|------------------------------------------------------------|\n| 2025-08-07T13:12:19Z  | 27       | D\u1ef1 \u00e1n Outlet Activation l\u00e0...              | https://drive.google.com/uc?id=xxxx&export=download        |\n\n## \ud83e\udde0 How to customize the workflow\n\n- Swap Whisper with Deepgram, AssemblyAI, or other providers.\n- Add speaker name detection or prompt-based tagging via GPT.\n- Route transcripts into Notion, Airtable, or CRM systems.\n- Add multi-language support or summarization steps.\n\n## \ud83d\udce6 Requirements\n\n| Component            | Required |\n|---------------------|----------|\n| Telegram API        | \u2705       |\n| Google Drive API    | \u2705       |\n| Google Sheets API   | \u2705       |\n| OpenAI Whisper API  | \u2705       |\n| n8n Cloud or Self-hosted | \u2705   |\n\nCreated with \u2764\ufe0f using [n8n](https://n8n.io)"
      },
      "typeVersion": 1
    },
    {
      "id": "505c0e4a-11e2-4a81-ac38-518af4cd3bf6",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2608,
        2080
      ],
      "parameters": {
        "width": 752,
        "height": 288,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Screenshot+2025-08-07+at+2.19.15%E2%80%AFPM.png \"Optional title\")"
      },
      "typeVersion": 1
    },
    {
      "id": "3eacc0c8-6f65-47a9-9eaf-559d5c3c273d",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        496,
        2400
      ],
      "parameters": {
        "width": 304,
        "height": 128,
        "content": "### 1. \ud83d\udce9 Telegram Trigger  \n**Description**: Listens for incoming messages from the user via the connected Telegram bot. This is the entry point of the workflow."
      },
      "typeVersion": 1
    },
    {
      "id": "b0d947b0-e970-43ea-8cc9-f3fc3b4f2d02",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        992,
        2544
      ],
      "parameters": {
        "width": 272,
        "height": 144,
        "content": "### 2. Is Audio Message?  \n**Description**: Checks whether the incoming Telegram message is a audio message. If not, the workflow routes to an \"unsupported message type\" handler."
      },
      "typeVersion": 1
    },
    {
      "id": "447bc7be-707d-4eed-b3c3-1c3bc48bb103",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1296,
        2096
      ],
      "parameters": {
        "width": 544,
        "height": 80,
        "content": "### 3.1. Download audio message and transcript with OpenAI\n Send the binary audio to OpenAI Whisper or your transcription service."
      },
      "typeVersion": 1
    },
    {
      "id": "938080c1-2503-4eb5-be21-32f732017869",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2048,
        2080
      ],
      "parameters": {
        "width": 400,
        "height": 80,
        "content": "### 4.1. Inform user via telegram\nSend friendly message to user with audio download URL\n"
      },
      "typeVersion": 1
    },
    {
      "id": "297f8859-a2bf-4a71-82f9-161841669418",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2112,
        2560
      ],
      "parameters": {
        "width": 304,
        "height": 96,
        "content": "### 4.2 Transform & log expense\n- Transform the Output to Audio Record  \n- Log Audio Record to Google Sheet  \n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "53031e0c-a427-4023-b1f6-c0aae9b6ad4f",
      "name": "Is audio message?",
      "type": "n8n-nodes-base.if",
      "position": [
        1088,
        2384
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "069b1c3b-d683-46f2-b7d6-9dbcdde41445",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.message.toJsonString() }}",
              "rightValue": "audio/ogg"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "1ecf333c-3dd2-44a9-b301-547391695613",
      "name": "Download audio message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1312,
        2288
      ],
      "parameters": {
        "fileId": "={{ $json.message.voice.file_id }}",
        "resource": "file"
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d61a14e8-9541-48be-95a0-5d4e5df85ff3",
      "name": "Transcribe a recording",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1536,
        2192
      ],
      "parameters": {
        "options": {},
        "resource": "audio",
        "operation": "transcribe"
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "564864d4-4a40-4f1a-b99e-fd0c6981ef7c",
      "name": "Upload file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1536,
        2384
      ],
      "parameters": {
        "name": "=audio-{{ $now.toFormat(\"yyyyLLdd-HHmmss\") }}-{{$binary.data.fileName}}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "1ObNNVJFR2vcKqP8p-ZnX_eaZy4gBHgha",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1ObNNVJFR2vcKqP8p-ZnX_eaZy4gBHgha",
          "cachedResultName": "SmartIT"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "59241354-ef2f-43aa-bf2a-bf394ace5907",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        1760,
        2288
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "af081dde-eb7d-4a4f-ad6c-d28ffd1a81ab",
      "name": "Telegram Voice Message Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        864,
        2384
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {
          "download": true
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "348897c4-3baf-4564-ae4c-f956d98936b9",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2464,
        2400
      ],
      "parameters": {
        "width": 1072,
        "height": 272,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Screenshot+2025-08-07+at+1.54.03%E2%80%AFPM.png \"Optional title\")"
      },
      "typeVersion": 1
    },
    {
      "id": "e8a585eb-1ed0-41c9-a2d8-25d62c12d387",
      "name": "Inform user via Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2208,
        2192
      ],
      "parameters": {
        "text": "=\u2705 Voice Transcription Complete\n\nYour voice recording (\u23f1\ufe0f {{ $json.Duration }} seconds, recorded at {{ $json.DateTime }}) has been successfully transcribed and securely stored.\n\n\ud83d\udcce Original audio stored here: {{ $json.AudioURL }}\n\nThank you for using VoiceScribe AI! \ud83c\udf99\ufe0f",
        "chatId": "={{ $json.ChatID }}",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "1ecbac8a-2451-4856-8a96-f7d5b3dbcef5",
      "name": "Log voice record to google sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2208,
        2384
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1a-u0XHQWjn4VKbq5WpvSJy5_JgHuFl5A2Q2TEBDC5bI/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1a-u0XHQWjn4VKbq5WpvSJy5_JgHuFl5A2Q2TEBDC5bI",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1a-u0XHQWjn4VKbq5WpvSJy5_JgHuFl5A2Q2TEBDC5bI/edit?usp=drivesdk",
          "cachedResultName": "Audio Notes"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "ef75b354-3db8-4536-afc9-4268395dff0a",
      "name": "Transform the output of voice record",
      "type": "n8n-nodes-base.code",
      "position": [
        1984,
        2288
      ],
      "parameters": {
        "jsCode": "const inputs = $input.all();\n\n// Assumes: \n// inputs[0] = transcript\n// inputs[1] = drive metadata\n\nconst transcriptData = inputs[0].json;\nconst driveData = inputs[1].json;\n\nconst result = {\n  DateTime: driveData.createdTime || '',\n  Duration: transcriptData.usage?.seconds || '',\n  Transcript: transcriptData.text || '',\n  AudioURL: driveData.webContentLink || '',\n  ChatID: $('Telegram Voice Message Trigger').first().json.message.chat.id\n};\n\nreturn [{ json: result }];"
      },
      "typeVersion": 2
    },
    {
      "id": "7996b57e-fffb-4707-a338-8bf390ecd134",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1520,
        2544
      ],
      "parameters": {
        "width": 544,
        "height": 80,
        "content": "### 3.2. Upload the original audio to drive for later usage\nBackup the original audio file."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "c8c05b3a-a276-4324-88ef-7a55779d4e2f",
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Transform the output of voice record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload file": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Is audio message?": {
      "main": [
        [
          {
            "node": "Download audio message",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Un-supported message type",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download audio message": {
      "main": [
        [
          {
            "node": "Transcribe a recording",
            "type": "main",
            "index": 0
          },
          {
            "node": "Upload file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcribe a recording": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram Voice Message Trigger": {
      "main": [
        [
          {
            "node": "Is audio message?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transform the output of voice record": {
      "main": [
        [
          {
            "node": "Log voice record to google sheet",
            "type": "main",
            "index": 0
          },
          {
            "node": "Inform user via Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}