当然可以!以下是一个 完整、可直接导入 n8n 的工作流 JSON 模板,实现:

用户在 Telegram 发送 /stock 600519
→ n8n 调用 Tushare 获取贵州茅台日线数据
→ 生成简洁股票摘要
→ 回复用户(含最新价格、涨跌幅、成交量)

✅ 前提条件

  1. 已安装 n8n(本地或服务器)
  2. 注册 Tushare 账号,获取 token:https://tushare.pro/

    • 免费版足够(需实名认证)
  3. 创建 Telegram Bot

    • 在 Telegram 搜索 @BotFather
    • 发送 /newbot,按提示创建,获取 Bot Token
  4. 获取你的 Telegram Chat ID

    • 与你的 bot 对话(发任意消息)
    • 访问 https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates 查看 chat.id

📦 工作流功能说明

  • 支持命令:/stock <股票代码>(如 /stock 000001/stock 600519
  • 自动识别 A 股(SH/SZ)、指数(如 000300
  • 返回:最新价、涨跌幅、成交量、日期
  • 错误处理:股票不存在、Tushare 配额不足等

🔧 完整 n8n 工作流 JSON

{
  "name": "Tushare + Telegram 股票查询机器人",
  "nodes": [
    {
      "parameters": {
        "options": {}
      },
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 2,
      "position": [250, 300],
      "webhookId": "xxxx-xxxx-xxxx"
    },
    {
      "parameters": {
        "keepOnlySet": true,
        "values": {
          "string": [
            { "name": "symbol", "value": "={{ $json[\"message\"][\"text\"].split(\" \")[1] }}" }
          ]
        }
      },
      "name": "提取股票代码",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.1,
      "position": [450, 300]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "={{ \"SELECT * FROM daily WHERE ts_code = '\" + ($node[\"格式化代码\"].json[\"ts_code\"] || '') + \"' ORDER BY trade_date DESC LIMIT 1\" }}",
        "options": {}
      },
      "name": "Tushare API (HTTP)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [850, 300],
      "parameters": {
        "url": "http://api.tushare.pro",
        "method": "POST",
        "sendBody": true,
        "bodyContentType": "json",
        "bodyParameters": {
          "parameters": {
            "properties": {
              "token": "YOUR_TUSHARE_TOKEN_HERE",
              "api_name": "daily",
              "params": {
                "ts_code": "={{ $node[\"格式化代码\"].json[\"ts_code\"] }}",
                "limit": 1
              }
            }
          }
        }
      }
    },
    {
      "parameters": {
        "keepOnlySet": true,
        "values": {
          "string": [
            {
              "name": "ts_code",
              "value": "={{ $node[\"提取股票代码\"].json[\"symbol\"] + ($node[\"提取股票代码\"].json[\"symbol\"].length === 6 ? ($node[\"提取股票代码\"].json[\"symbol\"].startsWith(\"6\") ? \".SH\" : \".SZ\") : \"\") }}"
            }
          ]
        }
      },
      "name": "格式化代码",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.1,
      "position": [650, 300]
    },
    {
      "parameters": {
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $json[\"data\"] && $json[\"data\"][\"items\"] && $json[\"data\"][\"items\"].length > 0 }}",
              "operation": "true"
            }
          ]
        }
      },
      "name": "检查数据是否存在",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [1050, 300]
    },
    {
      "parameters": {
        "text": "={{ \"📈 股票: \" + $node[\"格式化代码\"].json[\"ts_code\"] + \"\\n💰 最新价: \" + $json[\"data\"][\"items\"][0][\"close\"] + \"\\n🔺 涨跌幅: \" + ($json[\"data\"][\"items\"][0][\"pct_chg\"] || 0) + \"%\\n📊 成交量: \" + Math.round($json[\"data\"][\"items\"][0][\"vol\"] / 10000) + \"万手\\n📅 日期: \" + $json[\"data\"][\"items\"][0][\"trade_date\"] }}"
      },
      "name": "生成回复消息",
      "type": "n8n-nodes-base.setText",
      "typeVersion": 1,
      "position": [1250, 200]
    },
    {
      "parameters": {
        "chatId": "={{ $node[\"Telegram Trigger\"].json[\"message\"][\"chat\"][\"id\"] }}",
        "text": "={{ $node[\"生成回复消息\"].json[\"text\"] }}",
        "additionalFields": {}
      },
      "name": "Telegram 发送消息",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 2,
      "position": [1450, 200]
    },
    {
      "parameters": {
        "text": "❌ 未找到股票数据,请检查代码是否正确(如 600519、000001)"
      },
      "name": "错误消息",
      "type": "n8n-nodes-base.setText",
      "typeVersion": 1,
      "position": [1250, 400]
    },
    {
      "parameters": {
        "chatId": "={{ $node[\"Telegram Trigger\"].json[\"message\"][\"chat\"][\"id\"] }}",
        "text": "={{ $node[\"错误消息\"].json[\"text\"] }}",
        "additionalFields": {}
      },
      "name": "Telegram 发送错误",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 2,
      "position": [1450, 400]
    }
  ],
  "connections": {
    "Telegram Trigger": {
      "main": [
        [
          {
            "node": "提取股票代码",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "提取股票代码": {
      "main": [
        [
          {
            "node": "格式化代码",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "格式化代码": {
      "main": [
        [
          {
            "node": "Tushare API (HTTP)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Tushare API (HTTP)": {
      "main": [
        [
          {
            "node": "检查数据是否存在",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "检查数据是否存在": {
      "main": [
        [
          {
            "node": "生成回复消息",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "错误消息",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "生成回复消息": {
      "main": [
        [
          {
            "node": "Telegram 发送消息",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "错误消息": {
      "main": [
        [
          {
            "node": "Telegram 发送错误",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "1.0"
}

⚙️ 使用前必须修改的配置

1. 替换 Tushare Token

Tushare API (HTTP) 节点中,找到:

"token": "YOUR_TUSHARE_TOKEN_HERE"

→ 替换为你的实际 token(如 "token": "a1b2c3d4e5f6..."

2. 配置 Telegram 凭据

  • 进入 n8n 后台 → CredentialsNew
  • 类型选择 Telegram API
  • 填写你的 Bot Token
  • 在两个 Telegram 节点(Trigger 和 Send)中关联此凭据

🧪 测试方法

  1. 在 Telegram 中向你的 bot 发送:

    /stock 600519
  2. 应收到类似回复:

    📈 股票: 600519.SH
    💰 最新价: 1780.50
    🔺 涨跌幅: 1.25%
    📊 成交量: 4.2万手
    📅 日期: 20260110

🔒 安全与优化建议

问题解决方案
Tushare 频率限制免费版 500次/分钟,个人使用足够
暴露 Bot Token不要提交 JSON 到 GitHub,使用 n8n 凭据管理
股票代码格式错误可增加正则校验(如只允许 6 位数字)
响应慢可缓存最近请求(用 n8n 内存或 Redis)

🌟 扩展方向

  • ✅ 加入 K 线图生成(调用 TradingView 图片 API)
  • ✅ 支持 基本面查询(如 /pe 600519
  • ✅ 接入 AI 分析(用 Qwen 总结新闻情绪)
  • ✅ 设置 价格提醒(配合 n8n 定时触发)

如果你需要:

  • 带 K 线图的增强版
  • 支持港股/美股的版本
  • Docker Compose 一键部署包

欢迎告诉我,我可以继续为你定制!

标签: none