一个完整的 “Tushare + n8n + Telegram 股票查询机器人” 工作流模板(JSON)
当然可以!以下是一个 完整、可直接导入 n8n 的工作流 JSON 模板,实现:
用户在 Telegram 发送/stock 600519
→ n8n 调用 Tushare 获取贵州茅台日线数据
→ 生成简洁股票摘要
→ 回复用户(含最新价格、涨跌幅、成交量)
✅ 前提条件
- 已安装 n8n(本地或服务器)
注册 Tushare 账号,获取 token:https://tushare.pro/
- 免费版足够(需实名认证)
创建 Telegram Bot:
- 在 Telegram 搜索
@BotFather - 发送
/newbot,按提示创建,获取 Bot Token
- 在 Telegram 搜索
获取你的 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 后台 → Credentials → New
- 类型选择 Telegram API
- 填写你的 Bot Token
- 在两个 Telegram 节点(Trigger 和 Send)中关联此凭据
🧪 测试方法
在 Telegram 中向你的 bot 发送:
/stock 600519应收到类似回复:
📈 股票: 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 一键部署包
欢迎告诉我,我可以继续为你定制!