AutomationFlowsAI & RAG › Virtual Weather Caster Workflow

Virtual Weather Caster Workflow

Virtual-Weather-Caster-Workflow. Uses httpRequest, googleDrive, openAi, gmail. Scheduled trigger; 20 nodes.

Cron / scheduled trigger★★★★☆ complexityAI-powered20 nodesHTTP RequestGoogle DriveOpenAIGmailNotionSlack
AI & RAG Trigger: Cron / scheduled Nodes: 20 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow follows the Gmail → Google Drive 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
{
  "nodes": [
    {
      "parameters": {
        "url": "https://api.elevenlabs.io/v2/voices",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "voice_type",
              "value": "personal"
            },
            {
              "name": "search",
              "value": "\uac80\uc0c9\ud560 \ud0a4\uc6cc\ub4dc\ub85c \uad50\uccb4\ud558\uc138\uc694"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        420,
        160
      ],
      "id": "9e5269a0-fe07-446b-8fad-30513c222cbd",
      "name": "Find Voice",
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "url": "http://api.openweathermap.org/data/2.5/weather",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "q",
              "value": "\uc6d0\ud558\ub294 \ub3c4\uc2dc\ub97c \uc601\uc5b4\ub85c \uc785\ub825\ud558\uc138\uc694."
            },
            {
              "name": "units",
              "value": "metric"
            },
            {
              "name": "lang",
              "value": "kr"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        640,
        -120
      ],
      "id": "f40a6d37-fd07-4a0f-95d4-d035a1fb3f00",
      "name": "OpenWeatherMap API",
      "credentials": {
        "httpQueryAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=https://api.elevenlabs.io/v1/text-to-speech/{{ $json.voices[0].voice_id }}",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "output_format",
              "value": "mp3_44100_128"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{(() => {\n  const text = $('Markdown To Plain Text').item.json.extracted[0];\n  return {\n    model_id: \"eleven_multilingual_v2\",\n    voice_settings: {\n      speed: 1.2,\n      stability: 1.0,\n      similarity_boost: 0.7,\n      style: 0.35\n    },\n    text\n  };\n})()}}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        640,
        160
      ],
      "id": "314e5a14-0f84-4eec-af30-4bc93392cb5d",
      "name": "Generate Voice",
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "jsCode": "// \ub9c8\ud06c\ub2e4\uc6b4\uc5d0\uc11c \ucf54\ub4dc\ube14\ub7ed (```)\ub9cc \ucd94\ucd9c\nreturn [\n  {\n    json: {\n      extracted: (() => {\n        const md = $input.first().json.message.content;\n        const matches = [...md.matchAll(/```(?:\\w+)?\\n([\\s\\S]*?)```/g)];\n        return matches.map(m => m[1].trim());\n      })()\n    }\n  }\n];\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1480,
        -120
      ],
      "id": "f8aaa465-4ad8-4248-95ce-9e85475f747b",
      "name": "Markdown To Plain Text"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 30 5 * * *"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        400,
        -120
      ],
      "id": "8e3c14d6-c74a-46e3-99a8-e4fd5aac93fb",
      "name": "Schedule Trigger"
    },
    {
      "parameters": {
        "name": "=\uc624\ub298\uc758_\ub0a0\uc528_{{(new Date()).toISOString().split('T')[0] + '.mp3'}}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "folderId": {
          "__rl": true,
          "value": "1oXMkBoWj4SvVpWd9CMaL6JpUe3cRNo47",
          "mode": "list",
          "cachedResultName": "\uc5ec\ub7ec\ubd84\uc758_\ud3f4\ub354\ub85c_\uc9c0\uc815_\ud558\uc138\uc694.",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1oXMkBoWj4SvVpWd9CMaL6JpUe3cRNo47"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        880,
        160
      ],
      "id": "fa0994b8-e241-4976-9910-b049ec6bf7c0",
      "name": "Voice File Upload",
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "modelId": {
          "__rl": true,
          "value": "gpt-4o-2024-11-20",
          "mode": "list",
          "cachedResultName": "GPT-4O-2024-11-20"
        },
        "messages": {
          "values": [
            {
              "content": "=### Wearther Infomation\n\n{{(() => {\n  const date = new Date();\n  const yyyy = date.getFullYear();\n  const mm = String(date.getMonth() + 1).padStart(2, '0');\n  const dd = String(date.getDate()).padStart(2, '0');\n  const hh = String(date.getHours()).padStart(2, '0');\n  const min = String(date.getMinutes()).padStart(2, '0');\n  return `${yyyy}\ub144 ${mm}\uc6d4 ${dd}\uc77c ${hh}\uc2dc ${min}\ubd84`;\n})()}} \ubd80\uc0b0\uc758 \ub0a0\uc528\uc785\ub2c8\ub2e4.\n\n\ub0a0\uc528\ub294 {{ $('OpenWeatherMap API').item.json.weather[0].description }} \uc785\ub2c8\ub2e4.\n\ud604\uc7ac \uc628\ub3c4\ub294 {{ $('OpenWeatherMap API').item.json.main.temp }} \uc785\ub2c8\ub2e4.\n\uccb4\uac10 \uc628\ub3c4\ub294 {{ $('OpenWeatherMap API').item.json.main.feels_like }} \uc785\ub2c8\ub2e4.\n\uc2b5\ub3c4\ub294 {{ $('OpenWeatherMap API').item.json.main.humidity }} \uc785\ub2c8\ub2e4.\n\uae30\uc555\uc740 {{ $('OpenWeatherMap API').item.json.main.pressure }} \uc785\ub2c8\ub2e4.\n\ud48d\ud5a5\uc740 {{ $('OpenWeatherMap API').item.json.wind.deg }} \uc785\ub2c8\ub2e4.\n\ud48d\uc18d\uc740 {{ $('OpenWeatherMap API').item.json.wind.speed }} \uc785\ub2c8\ub2e4.\n\n### Personal Infomation\n\n- \uc774\ub984 : \uadfc\uc11d\n- \uc131\ubcc4 : \ub0a8\uc131\n\n### Instruction\n\n- \uae30\uc0c1 \uce90\uc2a4\ud130 \uc774\ub984\uc740 `\ub2e4\ud604`\uc785\ub2c8\ub2e4.\n- `\ub2e4\ud604`\uc740 \ub9d0\ud22c\uac00 \ubc1d\uc740 \ud3b8\uc774\uc5d0\uc694.\n- \uae30\uc0c1 \uc815\ubcf4\ub294 \ubaa8\ub450 \ub2e4 \ub9d0\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub429\ub2c8\ub2e4.\n- \ub098\ub9cc\uc744 \uc704\ud55c \uae30\uc0c1 \uce90\uc2a4\ud130\uc5d0\uac8c \uc624\ub298\uc758 \ub0a0\uc528\ub97c \uc804\ud558\ub294 [Wearther Infomation]\uc758 \ub0b4\uc6a9\uc744 \uae30\ubc18\uc73c\ub85c \uc544\uce68 \uae30\uc0c1 \ub300\ubcf8\uc744 \ub9cc\ub4e4\uc5b4 \uc8fc\uc138\uc694.\n- \ub0b4 \uc774\ub984\uc744 \ubd80\ub97c \ub54c\ub294 \ubc18\uc874\ub313\ub9d0\uc744 \uc0ac\uc6a9\ud558\uba74\uc11c \ud3b8\uc548\ud558\uac8c \ubd88\ub7ec\uc8fc\uc138\uc694.\n- \ub098\uae0b\ub098\uae0b\ud558\uace0 \ubc1d\uc740 \ub290\ub08c\uc73c\ub85c \uc791\uc131\ud574\uc8fc\uc138\uc694.\n- \uc26c\uc5b4\uac00\ub294 \ud0c0\uc774\ubc0d\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ub123\uc5b4\uc8fc\uc138\uc694.(\ud544\uc694\ud55c \uacbd\uc6b0\uc5d0\ub9cc \ub123\uc5b4\uc8fc\uc138\uc694.)\n  - 0.1 ~ 0.3\ucd08 \uc0ac\uc774\ub97c \ub300\ubcf8\uc5d0 \ub530\ub77c \uc801\uc808\ud558\uac8c \uc26c\uc5b4\uc8fc\uc138\uc694.\n  - \uc608\uc2dc : 0.3\ucd08 \uc274\ub54c : `<break time=\"0.3s\" />`\n  - \uc26c\uc5b4\uac00\ub294 \ud0c0\uc774\ubc0d \uba58\ud2b8 \uc55e \ub4a4\ub85c\ub294 \ubaa8\ub450 \ud070\ub530\uc634\ud45c\ub85c \ub300\uc0ac\uac00 \uadf8\ub8f9\uc73c\ub85c \ubb36\uc5ec\uc57c \ud569\ub2c8\ub2e4.\n- \uac00\ub2a5\ud558\uba74 markdown \ud615\uc2dd\uc73c\ub85c \ub300\ubcf8 \ub0b4\uc6a9\ub9cc \uc791\uc131\ud574\uc8fc\uc138\uc694.\n\n### Output"
            }
          ]
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        1100,
        -120
      ],
      "id": "ebf6d4cf-6881-4f26-a877-03f1f80b3c11",
      "name": "Make Script",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        1320,
        400
      ],
      "id": "d6f9d8d2-b2a8-4480-889e-57a94bf33690",
      "name": "No Operation, do nothing"
    },
    {
      "parameters": {
        "resource": "fileFolder",
        "queryString": "\uc624\ub298\uc758_\ub0a0\uc528",
        "filter": {},
        "options": {
          "fields": [
            "webViewLink",
            "id",
            "name"
          ]
        }
      },
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        420,
        400
      ],
      "id": "c830602a-b508-4be5-841a-d8c46e7fb62b",
      "name": "Google Drive Search",
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const files = $input.all();\n\nconst latestFile = files.reduce((latest, current) => {\n  const getDate = name => {\n    const match = name.match(/\\d{4}-\\d{2}-\\d{2}/);\n    return match ? new Date(match[0]) : new Date(0);\n  };\n\n  const latestName = latest.json.name;\n  const currentName = current.json.name;\n\n  return getDate(currentName) > getDate(latestName) ? current : latest;\n});\n\nreturn [{ json: { id: latestFile.json.id, name: latestFile.json.name, webViewLink: latestFile.json.webViewLink } }];\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        640,
        400
      ],
      "id": "35d61162-646a-4832-9c35-b48b09511257",
      "name": "File Search"
    },
    {
      "parameters": {
        "operation": "download",
        "fileId": {
          "__rl": true,
          "value": "={{ $json.id }}",
          "mode": "id"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        900,
        400
      ],
      "id": "5eb91f8f-a4f9-44b7-9ef8-5e2b77ce4d1a",
      "name": "Get Audio File",
      "alwaysOutputData": false,
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "sendTo": "your-email@example.com",
        "subject": "\uc624\ub298\uc758 \ub0a0\uc528\uc785\ub2c8\ub2e4.",
        "message": "=<!DOCTYPE html>\n<html lang=\"ko\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>\uc624\ub298\uc758 \ub0a0\uc528</title>\n</head>\n<body style=\"font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 0; padding: 0; background-color: #f9f9f9; color: #333;\">\n  <div style=\"max-width: 600px; margin: 0 auto; background-color: #ffffff; border-radius: 12px; overflow: hidden; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\">\n    <div style=\"background: linear-gradient(135deg, #64b5f6 0%, #2196f3 100%); color: white; padding: 25px; text-align: center;\">\n      <h1 style=\"margin: 0; font-size: 28px; font-weight: 500;\">\uc624\ub298\uc758 \ub0a0\uc528 \uc815\ubcf4</h1>\n      <div style=\"font-size: 16px; opacity: 0.9; margin-top: 5px;\"></div>\n    </div>\n    \n    <div style=\"padding: 40px 30px; text-align: center;\">\n      <div style=\"font-size: 72px; margin-bottom: 20px;\">\ud83c\udf24\ufe0f</div>\n      <p style=\"font-size: 18px; line-height: 1.6; margin-bottom: 30px; color: #555;\">\n        \uc624\ub298\uc758 \ub0a0\uc528 \uc815\ubcf4\uac00 \uc900\ube44\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<br>\n        \uc544\ub798 \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc790\uc138\ud55c \ub0a0\uc528 \uc815\ubcf4\ub97c \ud655\uc778\ud558\uc138\uc694.\n      </p>\n      \n      <a href=\"{{ $('File Search').item.json.webViewLink }}\" style=\"display: inline-block; padding: 14px 30px; background: linear-gradient(135deg, #4CAF50 0%, #388E3C 100%); color: white; text-decoration: none; border-radius: 50px; font-size: 16px; font-weight: 500; text-align: center; box-shadow: 0 3px 6px rgba(0, 0, 0, 0.1);\">\n        \ub0a0\uc528 \uc815\ubcf4 \ud655\uc778\ud558\uae30\n      </a>\n    </div>\n    \n    <div style=\"background-color: #f5f5f5; padding: 15px; text-align: center; font-size: 13px; color: #777;\">\n      <p style=\"margin: 5px 0;\">\u00a9 \ub0a0\uc528 \uc815\ubcf4 \uc11c\ube44\uc2a4. \ubaa8\ub4e0 \uad8c\ub9ac \ubcf4\uc720.</p>\n      <p style=\"margin: 5px 0;\">\uc774 \uc774\uba54\uc77c\uc740 \ud68c\uc6d0\ub2d8\uc758 \uad6c\ub3c5\uc5d0 \ub530\ub77c \ubc1c\uc1a1\ub418\uc5c8\uc2b5\ub2c8\ub2e4. <a href=\"#\" style=\"color: #2196f3;\">\uad6c\ub3c5 \ucde8\uc18c</a></p>\n    </div>\n  </div>\n</body>\n</html>",
        "options": {}
      },
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [
        1100,
        400
      ],
      "id": "c428055c-e14c-408e-b613-553982668833",
      "name": "Send Gmail",
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "resource": "databasePage",
        "databaseId": {
          "__rl": true,
          "value": "your-notion-db-node-id",
          "mode": "list",
          "cachedResultName": "your-notion-db-node-id",
          "cachedResultUrl": "https://www.notion.so/your-notion-db-node-id"
        },
        "title": "={{(() => {\n  const date = new Date();\n  const yyyy = date.getFullYear();\n  const mm = String(date.getMonth() + 1).padStart(2, '0');\n  const dd = String(date.getDate()).padStart(2, '0');\n  const hh = String(date.getHours()).padStart(2, '0');\n  const min = String(date.getMinutes()).padStart(2, '0');\n  return `${yyyy}\ub144 ${mm}\uc6d4 ${dd}\uc77c ${hh}\uc2dc ${min}\ubd84`;\n})()}}",
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "\ub0a0\uc528|rich_text",
              "textContent": "={{ $json.weather[0].description }}"
            },
            {
              "key": "\uc628\ub3c4|number",
              "numberValue": "={{ $json.main.temp }}"
            },
            {
              "key": "\uccb4\uac10 \uc628\ub3c4|number",
              "numberValue": "={{ $json.main.feels_like }}"
            },
            {
              "key": "\ucd5c\uc800 \uae30\uc628|number",
              "numberValue": "={{ $json.main.temp_min }}"
            },
            {
              "key": "\ucd5c\uace0 \uae30\uc628|number",
              "numberValue": "={{ $json.main.temp_max }}"
            },
            {
              "key": "\uc2b5\ub3c4|number",
              "numberValue": "={{ $json.main.humidity }}"
            },
            {
              "key": "\uae30\uc555|number",
              "numberValue": "={{ $json.main.pressure }}"
            },
            {
              "key": "\ud48d\uc18d|number",
              "numberValue": "={{ $json.wind.speed }}"
            },
            {
              "key": "\ud48d\ud5a5|number",
              "numberValue": "={{ $json.wind.deg }}"
            },
            {
              "key": "\uc9c0\uc5ed|rich_text",
              "textContent": "\ubd80\uc0b0"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.notion",
      "typeVersion": 2.2,
      "position": [
        880,
        -120
      ],
      "id": "0da236a2-ebf6-4f80-9c30-46d161e898d5",
      "name": "Notion",
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "authentication": "oAuth2",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "value": "C08623KATRV",
          "mode": "list",
          "cachedResultName": "n8n"
        },
        "text": "=[Make Weather Cast] \uad6c\uae00 \ub4dc\ub77c\uc774\ube0c \uc5c5\ub85c\ub4dc \uacfc\uc815\uc5d0\uc11c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. \uad6c\uae00 Oauth \uc778\uc99d\uc744 \ub2e4\uc2dc \ud655\uc778\ud574\ubcf4\uc138\uc694.",
        "otherOptions": {}
      },
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.3,
      "position": [
        1100,
        180
      ],
      "id": "99d873d7-23f2-45e7-ae27-16235b64663c",
      "name": "Slack",
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "content": "### \uc2ac\ub799\uc744 \uc4f0\uae30 \uc2eb\ub2e4\uba74 \uc9c0\uc6b0\uc138\uc694.",
        "height": 200,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1060,
        140
      ],
      "typeVersion": 1,
      "id": "bf2f4c4b-862c-490e-a9c6-5a71b7f59c12",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "### \ub0b4\uc6a9\uc744 \uc218\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.",
        "height": 200,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        340,
        120
      ],
      "typeVersion": 1,
      "id": "c7b8f305-65fb-4501-ac23-dc736d25c10e",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "### \ub0b4\uc6a9\uc744 \uc218\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.",
        "height": 200,
        "width": 440,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        580,
        -160
      ],
      "typeVersion": 1,
      "id": "52df127d-54d9-4909-a4f5-69edcc94d171",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "### \ub0b4\uc6a9\uc744 \uc218\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.",
        "height": 200,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        120
      ],
      "typeVersion": 1,
      "id": "e3b7de92-5cc8-4560-b9a0-cb47fcd99cc7",
      "name": "Sticky Note3"
    },
    {
      "parameters": {
        "content": "### \ub0b4\uc6a9\uc744 \uc218\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.",
        "height": 200,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        340,
        360
      ],
      "typeVersion": 1,
      "id": "6c14a0fd-05f1-4bbb-be32-007e76418822",
      "name": "Sticky Note4"
    },
    {
      "parameters": {
        "content": "### \ub0b4\uc6a9\uc744 \uc218\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.",
        "height": 200,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1040,
        360
      ],
      "typeVersion": 1,
      "id": "a90013c9-c799-4e55-be5e-b2c89b0bd0cb",
      "name": "Sticky Note5"
    }
  ],
  "connections": {
    "Find Voice": {
      "main": [
        [
          {
            "node": "Generate Voice",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenWeatherMap API": {
      "main": [
        [
          {
            "node": "Notion",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Voice": {
      "main": [
        [
          {
            "node": "Voice File Upload",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Markdown To Plain Text": {
      "main": [
        [
          {
            "node": "Find Voice",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "OpenWeatherMap API",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Voice File Upload": {
      "main": [
        [
          {
            "node": "Google Drive Search",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Make Script": {
      "main": [
        [
          {
            "node": "Markdown To Plain Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive Search": {
      "main": [
        [
          {
            "node": "File Search",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "File Search": {
      "main": [
        [
          {
            "node": "Get Audio File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Audio File": {
      "main": [
        [
          {
            "node": "Send Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Gmail": {
      "main": [
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notion": {
      "main": [
        [
          {
            "node": "Make Script",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack": {
      "main": [
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "meta": {
    "templateCredsSetupCompleted": true
  }
}

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

Virtual-Weather-Caster-Workflow. Uses httpRequest, googleDrive, openAi, gmail. Scheduled trigger; 20 nodes.

Source: https://gist.github.com/Mineru98/dc91b0c917a2f6f37fe3369bf683ea99 — 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

A scheduled process aggregates content from eight distinct data sources and standardizes all inputs into a unified format. AI models perform sentiment scoring, detect conspiracy or misinformation sign

HTTP Request, OpenAI, Postgres +2
AI & RAG

YouTube Automation Pipeline - Notion + Gemini + CometAPI + JSON2Video. Uses notion, httpRequest, googleDrive, writeBinaryFile. Scheduled trigger; 43 nodes.

Notion, HTTP Request, Google Drive +3
AI & RAG

What it is An automated LinkedIn content system that takes a simple form (idea + optional file), generates LinkedIn posts with OpenAI, stores them in Notion, builds Google Slides carousels, and auto-p

Form Trigger, OpenAI, Notion +6
AI & RAG

Imagine a dedicated financial expert tirelessly working behind the scenes, sifting through every transaction, every investment move, and every accounting entry. That's exactly what this automated syst

HTTP Request, Google Sheets, OpenAI +3
AI & RAG

Daily trigger scans your Notion database for unpublished blog ideas AI generates complete blog posts + engaging LinkedIn content using OpenAI (Blog Posting is not implemented yet) Creates custom image

Notion, Error Trigger, Gmail +3