8
n8n 中文网amn8n.com

个性化天气助手(集成 Google Calendar、WeatherAPI、AI 和 Telegram)

中级

这是一个Personal Productivity, AI Chatbot领域的自动化工作流,包含 15 个节点。主要使用 If, Set, Telegram, HttpRequest, GoogleCalendar 等节点。 集成 Google Calendar、WeatherAPI、Gemini 和 Telegram 的个性化天气助手

前置要求
  • Telegram Bot Token
  • 可能需要目标 API 的认证凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "",
  "meta": {
    "instanceId": "",
    "templateCredsSetupCompleted": true
  },
  "name": "个性化天气助手(集成 Google Calendar、WeatherAPI、AI 和 Telegram)",
  "tags": [],
  "nodes": [
    {
      "id": "c3104ac5-46d1-44b0-9086-ea7126a7e872",
      "name": "由 Github 模型提供支持",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -900,
        -320
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 6
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "2b570610-c022-47bc-a67d-d561aacd3339",
      "name": "获取多个活动",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        -560,
        -320
      ],
      "parameters": {
        "options": {},
        "timeMax": "={{ $now.setZone($json.Timezone).plus({ day: 1})}}",
        "timeMin": "={{ $now.setZone($json.Timezone) }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "primary"
        },
        "operation": "getAll"
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "id": "kUu2RaLw3ADsvumP",
          "name": "Google Calendar account"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "a244ba68-cea7-4a97-9f40-097a04bc6417",
      "name": "HTTP请求",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -120,
        -460
      ],
      "parameters": {
        "url": "=http://api.weatherapi.com/v1/current.json",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "key",
              "value": "=YOUR_WEATHERAPI_KEY"
            },
            {
              "name": "q",
              "value": "={{ $json.location }}"
            },
            {
              "name": "dt",
              "value": "={{ $json['time start'].split('T')[0] }}"
            },
            {
              "name": "hour",
              "value": "={{ parseInt($json['time start'].split('T')[1].split(':')[0]) }}"
            }
          ]
        }
      },
      "executeOnce": false,
      "typeVersion": 4.2,
      "alwaysOutputData": false
    },
    {
      "id": "bd053ee0-aa73-4012-a6e7-a11d02d11b09",
      "name": "如果",
      "type": "n8n-nodes-base.if",
      "position": [
        -380,
        -320
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.location }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "f9af621c-ec65-4bb8-aed5-c3ae7c5b29fa",
      "name": "AI 代理",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        160,
        -460
      ],
      "parameters": {
        "text": "=agenda for (today, tomorrow) : {{ $('If').item.json.start.dateTime }}\nagenda: {{ $('Get many events').item.json.summary }},\nlocation: {{ $('Get many events').item.json.location }},\ntime: start {{ $('Get many events').item.json.start.dateTime }} end {{ $('Get many events').item.json.end.dateTime }},\ncondition in the location : Temperature (Feels Like) {{ $json.current.feelslike_c }}, Humidity {{ $json.current.humidity }}, UV Index {{ $json.current.uv }}, Visibility {{ $json.current.vis_km }}, Wind (Direction + Speed) {{ $json.current.wind_kph }} {{ $json.current.wind_dir }}",
        "options": {
          "systemMessage": "=You are a smart personal assistant who helps users plan their day with agenda and weather information. Present information concisely, politely, and easily read. Avoid using technical language. Communicate it simply so it's easy to understand. Write in plain text without punctuation. Add emoji to make it more interactive.\n\nFormat each agenda item:\n- Event name and location\n- Time (if available)\n- Weather conditions\n- Provide a motivating statement or lighthearted advice if the weather is bad."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2
    },
    {
      "id": "04ba0f52-addc-45fd-a53e-357b61e40212",
      "name": "OpenRouter聊天模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        160,
        -300
      ],
      "parameters": {
        "model": "google/gemini-2.0-flash-exp:free",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "ecd56a45-2f16-40a5-87ec-d2adcae8acb1",
      "name": "设置时区",
      "type": "n8n-nodes-base.set",
      "position": [
        -720,
        -320
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "",
              "name": "Timezone",
              "type": "string",
              "value": "UTC"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "f5d304be-a8a5-46f0-805e-ed31ec79b14c",
      "name": "发送短信",
      "type": "n8n-nodes-base.telegram",
      "position": [
        520,
        -460
      ],
      "webhookId": "YOUR_TELEGRAM_WEBHOOK_ID",
      "parameters": {
        "text": "={{ $json.output }}",
        "chatId": "YOUR_TELEGRAM_CHAT_ID",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "8657096c-2e49-49ce-a5bd-32e1eb86af8e",
      "name": "AI 智能体2",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -120,
        20
      ],
      "parameters": {
        "text": "=agenda for (today, tomorrow) : {{ $json.start.date }}\nagenda: {{ $json.summary }},\ntime: start {{ $json.start.date }} end {{ $json.end.date }},\n",
        "options": {
          "systemMessage": "=You are a smart personal assistant who helps users plan their day with agenda information. Present information concisely, politely, and easily read. Avoid using technical language; communicate it simply so it's easy to understand. Write in plain text without punctuation. Add emoji to make it more interactive.\n\nFormat each agenda item:\n- Event name\n- Time (if available)\n- Provide a motivating statement."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2
    },
    {
      "id": "ee687c11-4622-40db-b961-2c33584e8a26",
      "name": "OpenRouter 聊天模型2",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        -120,
        240
      ],
      "parameters": {
        "model": "google/gemini-2.0-flash-exp:free",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "",
      "name": "发送短信",
      "type": "n8n-nodes-base.telegram",
      "position": [
        280,
        20
      ],
      "webhookId": "YOUR_TELEGRAM_WEBHOOK_ID",
      "parameters": {
        "text": "={{ $json.output }}",
        "chatId": "YOUR_TELEGRAM_CHAT_ID",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1640,
        -960
      ],
      "parameters": {
        "width": 620,
        "height": 1080,
        "content": "# 个性化天气助手(集成 Google Calendar、WeatherAPI、AI 和 Telegram)"
      },
      "typeVersion": 1
    },
    {
      "id": "",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -940,
        -500
      ],
      "parameters": {
        "color": 2,
        "width": 680,
        "height": 340,
        "content": "- 基于计划运行工作流,默认设置为上午 6 点。"
      },
      "typeVersion": 1
    },
    {
      "id": "",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        -620
      ],
      "parameters": {
        "color": 3,
        "width": 560,
        "height": 440,
        "content": "- 根据事件位置、日期和时间(可自定义)从 WeatherAPI 获取本地天气数据"
      },
      "typeVersion": 1
    },
    {
      "id": "",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        -120
      ],
      "parameters": {
        "color": 4,
        "width": 320,
        "height": 480,
        "content": "- 如果事件没有位置,数据仍将以个性化消息的形式呈现。"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "AI Agent2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent2": {
      "main": [
        [
          {
            "node": "Send a text message1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Timezone": {
      "main": [
        [
          {
            "node": "Get many events",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get many events": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Set Timezone",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent2",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

中级 - 个人效率, AI 聊天机器人

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
中级
节点数量15
分类2
节点类型9
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
Budi SJ

Budi SJ

@budisj

I’m a Product Designer who also works as an Automation Developer. With a background in product design and systems thinking, I build user-centered workflows. My focus is on helping teams and businesses work more productively through impactful automation systems.

外部链接
在 n8n.io 查看

分享此工作流