Agent AI Binance v1.02

Avancé

Ceci est unCrypto Trading, AI Chatbot, Multimodal AIworkflow d'automatisation du domainecontenant 35 nœuds.Utilise principalement des nœuds comme Set, Code, Telegram, Agent, HttpRequestTool. Accès aux données de marché Binance en temps réel sur Telegram, formatées avec GPT-4o

Prérequis
  • Token Bot Telegram
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
  • Clé API OpenAI
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "ahrPDHmf7YOdXsl2",
  "meta": {
    "instanceId": "a5283507e1917a33cc3ae615b2e7d5ad2c1e50955e6f831272ddd5ab816f3fb6"
  },
  "name": "Binance AI Agent v1.02",
  "tags": [],
  "nodes": [
    {
      "id": "94403c10-3da3-4fd8-b6c3-cdf046f0a4d0",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -1264,
        736
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "yUizd8t0sD5wMYVG",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "76a4db9d-5a82-4647-b98c-c87e779f275b",
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -1008,
        240
      ],
      "webhookId": "944e6f8d-ffcc-4692-a777-7410f2fd4016",
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "NRLKuLR7z8vCesub",
          "name": "BinanceSpotTradingAIAgent_Bot"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "60601a5d-9f40-4bbf-97a5-7513ac6fd385",
      "name": "Authentification Utilisateur (Remplacer ID Telegram)",
      "type": "n8n-nodes-base.code",
      "position": [
        -688,
        240
      ],
      "parameters": {
        "jsCode": "if ($input.first().json.message.from.id !== <<Replace>>) { // Replace with your actual ID\n  return {unauthorized: true};\n} else {\n  // Return the original data when authorized\n  return $input.all();\n}"
      },
      "typeVersion": 2
    },
    {
      "id": "e396c95d-f49d-4e6a-bb63-d37b5bfb33fa",
      "name": "Ajoute \"SessionId\"",
      "type": "n8n-nodes-base.set",
      "position": [
        -416,
        240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "47598bf1-e55f-4cc0-ae75-272085e7ce02",
              "name": "=sessionId",
              "type": "string",
              "value": "={{ $json.message.chat.id }}"
            },
            {
              "id": "daa49d74-e55e-47bc-ac52-8686d591ab83",
              "name": "message",
              "type": "string",
              "value": "={{ $json.message.text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "928b463d-3135-461e-8248-ddba9272eeed",
      "name": "Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        896,
        240
      ],
      "webhookId": "79d6c29c-1e04-414a-9989-afb1f7a58035",
      "parameters": {
        "text": "={{ $json.message }}",
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "id": "NRLKuLR7z8vCesub",
          "name": "BinanceSpotTradingAIAgent_Bot"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "e233cb3c-98fd-423a-bbbc-b043528e5920",
      "name": "Divise si message > 4000 caractères",
      "type": "n8n-nodes-base.code",
      "position": [
        464,
        240
      ],
      "parameters": {
        "jsCode": "// Input: assumes incoming message in `item.json.message`\nconst input = $json.output;\nconst chunkSize = 4000;\n\n// Function to split text\nfunction splitMessage(text, size) {\n  const result = [];\n  for (let i = 0; i < text.length; i += size) {\n    result.push(text.substring(i, i + size));\n  }\n  return result;\n}\n\n// Logic\nif (input.length <= chunkSize) {\n  return [{ json: { message: input } }];\n} else {\n  const chunks = splitMessage(input, chunkSize);\n  return chunks.map(chunk => ({ json: { message: chunk } }));\n}"
      },
      "typeVersion": 2
    },
    {
      "id": "ab8f1233-6042-48fb-861b-e6c527fe64db",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1072,
        -32
      ],
      "parameters": {
        "color": 4,
        "height": 460,
        "content": "## Trigger Incoming Telegram Command\nNode: Telegram Trigger\n**Listens for new Telegram messages** from users.\nTriggers the full agent process and passes raw user input downstream."
      },
      "typeVersion": 1
    },
    {
      "id": "8a30b225-b801-41db-aa7e-11c84db638a7",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -752,
        -32
      ],
      "parameters": {
        "color": 2,
        "height": 460,
        "content": "## Validate User Access\nNode: User **Authentication\nChecks incoming Telegram ID** against the approved user list."
      },
      "typeVersion": 1
    },
    {
      "id": "e591fe19-2fd8-4bd3-85b9-bfa383feeef5",
      "name": "Note adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -464,
        -32
      ],
      "parameters": {
        "color": 5,
        "height": 460,
        "content": "## Generate Session Metadata\nNode: Add S**essionId\nCreates a sessionId using the Telegram chat_id**.\nThis is passed into all downstream tools for memory and workflow routing."
      },
      "typeVersion": 1
    },
    {
      "id": "285d5678-88ff-4a4e-a0c0-f38cf2b1a08b",
      "name": "Note adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -192,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 756,
        "content": "## Main AI Agent: Data Fetcher\n\n**Node: Binance Data Agent**\nThis is the **core orchestrator**. It uses OpenAI only to **format and present raw Binance market data**, not to analyze or generate strategies.\n\nIt has direct **HTTP request access** to the Binance REST API and retrieves:\n\n* **Live price** (`/api/v3/ticker/price`)\n* **24h ticker stats** (`/api/v3/ticker/24hr`)\n* **Order book depth** (`/api/v3/depth`)\n* **Best bid/ask** (`/api/v3/ticker/bookTicker`)\n* **Klines/candlesticks** (`/api/v3/klines`)\n\nThe agent calls these endpoints in parallel for the requested symbol, validates results, and then **presents the data in clean Telegram HTML format**.\n\nIt does **not**:\n\n* Perform technical analysis\n* Generate strategies or predictions\n* Fetch sentiment or news\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "1e78ced2-31e2-458a-9bcf-9f7d397ea882",
      "name": "Note adhésive4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        -32
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 460,
        "content": "## Handle Telegram Message Limits\nNode: Code (split logic)\nChecks if the **GPT output exceeds 4000 characters**.\nIf so, it splits the message into safe chunks and passes them on sequentially."
      },
      "typeVersion": 1
    },
    {
      "id": "ff0ceeb6-e8cd-4f33-8965-ccc2485bbc13",
      "name": "Note adhésive5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        832,
        -32
      ],
      "parameters": {
        "color": 4,
        "height": 460,
        "content": "## Send Final Report to Telegram\nNode: Telegram sendMessage\nSends **formatted HTML report (or split chunks)** directly to the authenticated user via Telegram bot."
      },
      "typeVersion": 1
    },
    {
      "id": "a6163a28-384d-4553-b428-c936c7198979",
      "name": "Note adhésive6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1344,
        640
      ],
      "parameters": {
        "height": 540,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## GPT Model for Reasoning\nNode: OpenAI Chat Model\nModel: **gpt-4o-mini**\nUsed to:\n\nInterpret signal values\n\nGenerate structured HTML\n\n**Recommend spot and leverage trades**\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8e4892bd-c079-474c-9cc9-85a1bd0f8253",
      "name": "Note adhésive7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -480,
        512
      ],
      "parameters": {
        "color": 6,
        "height": 884,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n### **Order Book Depth**\n\n**Endpoint:** `GET /api/v3/depth`\n**What it does:** Returns **order book** bids/asks up to `limit`.\n**Params:**\n\n* `symbol` (STRING, required)\n* `limit` (INT, default 100; max 5000; we default 100)\n  **Request weight:** varies by `limit` (1–100 → 5; 101–500 → 25; 501–1000 → 50; 1001–5000 → 250).\n  **Returns:** `lastUpdateId`, `bids: [[price, qty], ...]`, `asks: [[price, qty], ...]`\n  **n8n query mapping:**\n\n```txt\nsymbol = $fromAI('parameters0_Value', '', 'string')\nlimit  = $fromAI('parameters1_Value', 100, 'number')\n```\n\n**Notes:** If `limit > 5000`, only 5000 are returned."
      },
      "typeVersion": 1
    },
    {
      "id": "3c5ac786-7958-4071-b8b3-59101c41b17a",
      "name": "Note adhésive8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        128,
        512
      ],
      "parameters": {
        "color": 6,
        "height": 868,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n### **Best Bid/Ask (Book Ticker)**\n\n**Endpoint:** `GET /api/v3/ticker/bookTicker`\n**What it does:** Best **bid/ask** and sizes for the symbol.\n**Params:** `symbol` (optional; **we send it**)\n**Request weight:** `2` with `symbol`, `4` otherwise.\n**Returns:** `{\"symbol\":\"BTCUSDT\",\"bidPrice\":\"...\",\"bidQty\":\"...\",\"askPrice\":\"...\",\"askQty\":\"...\"}`\n**n8n query mapping:**\n\n```txt\nsymbol = $fromAI('parameters0_Value', '', 'string')\n```\n\n**Notes:** Great for quick spread snapshot."
      },
      "typeVersion": 1
    },
    {
      "id": "d41d5678-dafa-4ca7-a77a-aa7a7bd3eadb",
      "name": "Note adhésive9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1072,
        640
      ],
      "parameters": {
        "color": 3,
        "height": 540,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Short-Term Memory Module\nNode: **Simple Memory\nStores the sessionId**, symbol, and other state data.\nUseful for:\n\nMulti-turn Telegram interactions\n\nTracking indicator agreement across timeframes\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "062407b4-b9db-4285-ade5-f3010d566737",
      "name": "Mémoire simple",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -992,
        736
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "ea3ea33a-d3cc-4360-8351-c0791cf38e7b",
      "name": "Agent IA Binance",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -96,
        240
      ],
      "parameters": {
        "text": "={{ $json.message }}",
        "options": {
          "systemMessage": "You are the **Binance Spot Market Data Agent**.  \n\nYou have **HTTP request access** to the official Binance REST API to retrieve market data for any requested Binance Spot trading pair.  \nYour job is to **fetch and present data only**. You do **not** analyze, predict, or recommend.\n\n---\n\n## 🔗 API Access\n\n**Base endpoints** (primary default = `https://api.binance.com`):  \n- https://api.binance.com  \n- https://api-gcp.binance.com  \n- https://api1.binance.com … https://api4.binance.com  \n\n**Format rules:**  \n- All requests are **HTTP GET**  \n- Responses are **JSON**  \n- Parameters use query strings (e.g., `?symbol=BTCUSDT&limit=100`)  \n- `symbol` is always uppercase, no `/` or `-` (e.g., `BTCUSDT`)  \n\n---\n\n## 📌 Available Market Data Endpoints\n\n1. **Order Book Depth**  \n   `GET /api/v3/depth?symbol=BTCUSDT&limit=100`  \n   • Returns top bids/asks up to the limit (default 100, max 5000).  \n\n2. **Recent Trades**  \n   `GET /api/v3/trades?symbol=BTCUSDT&limit=100`  \n   • Most recent trades (default 500, max 1000).  \n\n3. **Aggregate Trades**  \n   `GET /api/v3/aggTrades?symbol=BTCUSDT&limit=100`  \n   • Aggregated trades by taker, price, and time.  \n\n4. **Kline / Candlestick Data**  \n   `GET /api/v3/klines?symbol=BTCUSDT&interval=15m&limit=20`  \n   • Supported intervals: `1m,3m,5m,15m,30m,1h,2h,4h,6h,8h,12h,1d,3d,1w,1M`  \n   • Default limit = 500 (max 1000).  \n\n5. **Current Average Price**  \n   `GET /api/v3/avgPrice?symbol=BTCUSDT`  \n   • Returns rolling average price.  \n\n6. **24hr Ticker Price Change Statistics**  \n   `GET /api/v3/ticker/24hr?symbol=BTCUSDT`  \n   • Includes open, high, low, last, volume, % change, etc.  \n\n7. **Latest Symbol Price**  \n   `GET /api/v3/ticker/price?symbol=BTCUSDT`  \n   • Returns the latest trade price.  \n\n8. **Order Book Best Bid/Ask**  \n   `GET /api/v3/ticker/bookTicker?symbol=BTCUSDT`  \n   • Returns best bid and ask with sizes.  \n\n---\n\n## 🧩 Utility Tools\n\n- **Calculator** → Perform math inside the workflow (e.g., spreads, % changes, normalizations).  \n- **Think** → Lightweight reasoning helper to reshape JSON, select fields, and prepare outputs.  \n\n---\n\n## 📤 Output Format (Telegram HTML)\n\nStart every response with:  \n```html\n<b>{{SYMBOL}} — Binance Spot Data</b>\n````\n\nThen group logically:\n\n```html\n<b>Price</b>\n• Last: {{lastPrice}}\n• Avg: {{avgPrice}}\n• Change (24h): {{pctChange}}%\n\n<b>24h Stats</b>\n• Open: {{open}} • High: {{high}} • Low: {{low}} • Close: {{close}}\n• Volume: {{baseVol}} • Quote Vol: {{quoteVol}}\n\n<b>Order Book (Top 5)</b>\n• Bids: [price x qty] …\n• Asks: [price x qty] …\n\n<b>Klines (latest 20)</b>\n• Interval: {{interval}} (O/H/L/C per candle)\n```\n\n---\n\n## ⚠️ Rules\n\n* Always **call the correct API endpoint** for the requested data.\n* Do **not** fabricate or calculate values yourself.\n* Do **not** provide trading advice, sentiment, or predictions.\n* Do **not** output raw JSON; always present clean, human-readable values.\n* If data is missing or request fails, show `N/A`.\n\n```\n"
        },
        "promptType": "define"
      },
      "typeVersion": 1.8
    },
    {
      "id": "ec3490ea-99f6-4b8b-afac-8d7019f44fe4",
      "name": "Prix (Dernier)",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        -112,
        592
      ],
      "parameters": {
        "url": "https://api.binance.com/api/v3/ticker/price",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "symbol",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', ``, 'string') }}"
            }
          ]
        },
        "toolDescription": "### 🏷 Tool: **Price (Latest)**\n\n**Endpoint:** `GET /api/v3/ticker/price`\n**What it does:** Returns the **latest trade price** for a symbol.\n**Params:** `symbol` (STRING, optional for all symbols; **we send it**)\n**Request weight:** `2` with `symbol` (otherwise `4`).\n**Returns:** `{\"symbol\":\"BTCUSDT\",\"price\":\"...\"}`\n**n8n query mapping:**\n\n```txt\nsymbol = $fromAI('parameters0_Value', '', 'string')\n```\n\n**Notes:** Use UPPERCASE symbols without `-` or `/` (e.g., `BTCUSDT`)."
      },
      "typeVersion": 4.2
    },
    {
      "id": "1133028f-0755-4820-94ac-e4b59a101562",
      "name": "Statistiques 24h",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        -704,
        592
      ],
      "parameters": {
        "url": "https://api.binance.com/api/v3/ticker/24hr",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "symbol",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', ``, 'string') }}"
            }
          ]
        },
        "toolDescription": "### 🏷 Tool: **24h Stats**\n\n**Endpoint:** `GET /api/v3/ticker/24hr`\n**What it does:** 24-hour rolling window stats: **open/high/low/last**, **volume**, **quoteVolume**, **% change**, etc.\n**Params:**\n\n* `symbol` (STRING, optional but we send it)\n* (Mutually exclusive with `symbols`)\n  **Request weight:** `2` with one `symbol`; heavier without or with many symbols.\n  **Returns (FULL):** priceChange, priceChangePercent, weightedAvgPrice, openPrice, highPrice, lowPrice, lastPrice, volume, quoteVolume, openTime, closeTime, firstId, lastId, count.\n  **n8n query mapping:**\n\n```txt\nsymbol = $fromAI('parameters0_Value', '', 'string')\n```\n\n**Notes:** Rolling window differs from `ticker/tradingDay`.&#x20;"
      },
      "typeVersion": 4.2
    },
    {
      "id": "18d8ac71-19de-4075-ae4e-b4ef7a1ff408",
      "name": "Profondeur du carnet d'ordres",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        -400,
        592
      ],
      "parameters": {
        "url": "https://api.binance.com/api/v3/depth",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "symbol",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', ``, 'string') }}"
            },
            {
              "name": "limit",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', `100`, 'number') }}"
            }
          ]
        },
        "toolDescription": "### 🏷 Tool: **Order Book Depth**\n\n**Endpoint:** `GET /api/v3/depth`\n**What it does:** Returns **order book** bids/asks up to `limit`.\n**Params:**\n\n* `symbol` (STRING, required)\n* `limit` (INT, default 100; max 5000; we default 100)\n  **Request weight:** varies by `limit` (1–100 → 5; 101–500 → 25; 501–1000 → 50; 1001–5000 → 250).\n  **Returns:** `lastUpdateId`, `bids: [[price, qty], ...]`, `asks: [[price, qty], ...]`\n  **n8n query mapping:**\n\n```txt\nsymbol = $fromAI('parameters0_Value', '', 'string')\nlimit  = $fromAI('parameters1_Value', 100, 'number')\n```\n\n**Notes:** If `limit > 5000`, only 5000 are returned."
      },
      "typeVersion": 4.2
    },
    {
      "id": "516159d8-484f-4df2-9dc1-c844cc15630f",
      "name": "Meilleure offre/demande",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        208,
        592
      ],
      "parameters": {
        "url": "https://api.binance.com/api/v3/ticker/bookTicker",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "symbol",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', ``, 'string') }}"
            }
          ]
        },
        "toolDescription": "### 🏷 Tool: **Best Bid/Ask (Book Ticker)**\n\n**Endpoint:** `GET /api/v3/ticker/bookTicker`\n**What it does:** Best **bid/ask** and sizes for the symbol.\n**Params:** `symbol` (optional; **we send it**)\n**Request weight:** `2` with `symbol`, `4` otherwise.\n**Returns:** `{\"symbol\":\"BTCUSDT\",\"bidPrice\":\"...\",\"bidQty\":\"...\",\"askPrice\":\"...\",\"askQty\":\"...\"}`\n**n8n query mapping:**\n\n```txt\nsymbol = $fromAI('parameters0_Value', '', 'string')\n```\n\n**Notes:** Great for quick spread snapshot."
      },
      "typeVersion": 4.2
    },
    {
      "id": "ead793de-1050-4ab3-aeab-b0d6cbb95918",
      "name": "Klines (Bougies)",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        544,
        592
      ],
      "parameters": {
        "url": "https://api.binance.com/api/v3/klines",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "symbol",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', ``, 'string') }}"
            },
            {
              "name": "interval",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', `15m`, 'string') }}"
            },
            {
              "name": "limit",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters2_Value', `20`, 'number') }}"
            }
          ]
        },
        "toolDescription": "### 🏷 Tool: **Klines (Candles)**\n\n**Endpoint:** `GET /api/v3/klines`\n**What it does:** Candlestick bars for a symbol/interval.\n**Params:**\n\n* `symbol` (STRING, required)\n* `interval` (ENUM, required — e.g., `1m,3m,5m,15m,30m,1h,2h,4h,6h,8h,12h,1d,3d,1w,1M`)\n* `limit` (INT, default 500, max 1000 — **we set 20**)\n* `startTime`, `endTime`, `timeZone` (optional)\n  **Request weight:** `2`.\n  **Returns (array per candle):** `[ openTime, open, high, low, close, volume, closeTime, quoteAssetVolume, numberOfTrades, takerBuyBaseVolume, takerBuyQuoteVolume, ignore ]`\n  **n8n query mapping:**\n\n```txt\nsymbol  = $fromAI('parameters0_Value', '', 'string')\ninterval= $fromAI('parameters1_Value', '15m', 'string')\nlimit   = $fromAI('parameters2_Value', 20, 'number')\n```\n\n**Notes:** Without `startTime/endTime`, returns most recent."
      },
      "typeVersion": 4.2
    },
    {
      "id": "5c6076d8-cfef-4199-946e-8491a86ad0d9",
      "name": "Prix moyen",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        896,
        592
      ],
      "parameters": {
        "url": "https://api.binance.com/api/v3/avgPrice",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "symbol",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', ``, 'string') }}"
            }
          ]
        },
        "toolDescription": "### 🏷 Tool: **Average Price**\n\n**Endpoint:** `GET /api/v3/avgPrice`\n**What it does:** **Current average price** for a symbol (rolling).\n**Params:** `symbol` (STRING, required)\n**Request weight:** `2`.\n**Returns:** `{\"mins\":5,\"price\":\"...\",\"closeTime\":...}`\n**n8n query mapping:**\n\n```txt\nsymbol = $fromAI('parameters0_Value', '', 'string')\n```\n\n**Notes:** Fast way to include an average alongside `lastPrice`."
      },
      "typeVersion": 4.2
    },
    {
      "id": "f6094f0e-9cff-40d2-bbb3-43d9c5d38a0b",
      "name": "Transactions récentes",
      "type": "n8n-nodes-base.httpRequestTool",
      "position": [
        1216,
        592
      ],
      "parameters": {
        "url": "https://api.binance.com/api/v3/trades",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "symbol",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', ``, 'string') }}"
            },
            {
              "name": "limit",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', `100`, 'number') }}"
            }
          ]
        },
        "toolDescription": "### 🏷 Tool: **Recent Trades**\n\n**Endpoint:** `GET /api/v3/trades`\n**What it does:** **Most recent trades** for a symbol.\n**Params:**\n\n* `symbol` (STRING, required)\n* `limit` (INT, default 500, max 1000 — **we set default 100**)\n  **Request weight:** `25`.\n  **Returns:** array of trades `{id, price, qty, quoteQty, time, isBuyerMaker, isBestMatch}`\n  **n8n query mapping:**\n\n```txt\nsymbol = $fromAI('parameters0_Value', '', 'string')\nlimit  = $fromAI('parameters1_Value', 100, 'number')\n```\n\n**Notes:** For older trades, use `/historicalTrades`."
      },
      "typeVersion": 4.2
    },
    {
      "id": "2bfcf8b7-3291-4345-91cf-a67fd17668f9",
      "name": "Note adhésive10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        512
      ],
      "parameters": {
        "color": 6,
        "height": 964,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n### **24h Stats**\n\n**Endpoint:** `GET /api/v3/ticker/24hr`\n**What it does:** 24-hour rolling window stats: **open/high/low/last**, **volume**, **quoteVolume**, **% change**, etc.\n**Params:**\n\n* `symbol` (STRING, optional but we send it)\n* (Mutually exclusive with `symbols`)\n  **Request weight:** `2` with one `symbol`; heavier without or with many symbols.\n  **Returns (FULL):** priceChange, priceChangePercent, weightedAvgPrice, openPrice, highPrice, lowPrice, lastPrice, volume, quoteVolume, openTime, closeTime, firstId, lastId, count.\n  **n8n query mapping:**\n\n```txt\nsymbol = $fromAI('parameters0_Value', '', 'string')\n```\n\n**Notes:** Rolling window differs from `ticker/tradingDay`.&#x20;"
      },
      "typeVersion": 1
    },
    {
      "id": "b265687d-c91f-4485-891f-b2a1b2937f5d",
      "name": "Note adhésive11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -192,
        512
      ],
      "parameters": {
        "color": 6,
        "height": 772,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n### Price (Latest)\n\n**Endpoint:** `GET /api/v3/ticker/price`\n**What it does:** Returns the **latest trade price** for a symbol.\n**Params:** `symbol` (STRING, optional for all symbols; **we send it**)\n**Request weight:** `2` with `symbol` (otherwise `4`).\n**Returns:** `{\"symbol\":\"BTCUSDT\",\"price\":\"...\"}`\n**n8n query mapping:**\n\n```txt\nsymbol = $fromAI('parameters0_Value', '', 'string')\n```\n\n**Notes:** Use UPPERCASE symbols without `-` or `/` (e.g., `BTCUSDT`)."
      },
      "typeVersion": 1
    },
    {
      "id": "ab819627-7598-4eed-8e04-4812ca2d5e6a",
      "name": "Note adhésive12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        512
      ],
      "parameters": {
        "color": 6,
        "height": 1060,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n### **Klines (Candles)**\n\n**Endpoint:** `GET /api/v3/klines`\n**What it does:** Candlestick bars for a symbol/interval.\n**Params:**\n\n* `symbol` (STRING, required)\n* `interval` (ENUM, required — e.g., `1m,3m,5m,15m,30m,1h,2h,4h,6h,8h,12h,1d,3d,1w,1M`)\n* `limit` (INT, default 500, max 1000 — **we set 20**)\n* `startTime`, `endTime`, `timeZone` (optional)\n  **Request weight:** `2`.\n  **Returns (array per candle):** `[ openTime, open, high, low, close, volume, closeTime, quoteAssetVolume, numberOfTrades, takerBuyBaseVolume, takerBuyQuoteVolume, ignore ]`\n  **n8n query mapping:**\n\n```txt\nsymbol  = $fromAI('parameters0_Value', '', 'string')\ninterval= $fromAI('parameters1_Value', '15m', 'string')\nlimit   = $fromAI('parameters2_Value', 20, 'number')\n```\n\n**Notes:** Without `startTime/endTime`, returns most recent."
      },
      "typeVersion": 1
    },
    {
      "id": "69ba027f-e1d0-4a66-a4db-6360adce8a9f",
      "name": "Note adhésive13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        512
      ],
      "parameters": {
        "color": 6,
        "height": 740,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n### /**Average Price**\n\n**Endpoint:** `GET /api/v3/avgPrice`\n**What it does:** **Current average price** for a symbol (rolling).\n**Params:** `symbol` (STRING, required)\n**Request weight:** `2`.\n**Returns:** `{\"mins\":5,\"price\":\"...\",\"closeTime\":...}`\n**n8n query mapping:**\n\n```txt\nsymbol = $fromAI('parameters0_Value', '', 'string')\n```\n\n**Notes:** Fast way to include an average alongside `lastPrice`."
      },
      "typeVersion": 1
    },
    {
      "id": "d87e1a58-46dd-4dbc-bd35-fd352ab40100",
      "name": "Note adhésive14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1136,
        512
      ],
      "parameters": {
        "color": 6,
        "height": 868,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n### **Recent Trades**\n\n**Endpoint:** `GET /api/v3/trades`\n**What it does:** **Most recent trades** for a symbol.\n**Params:**\n\n* `symbol` (STRING, required)\n* `limit` (INT, default 500, max 1000 — **we set default 100**)\n  **Request weight:** `25`.\n  **Returns:** array of trades `{id, price, qty, quoteQty, time, isBuyerMaker, isBestMatch}`\n  **n8n query mapping:**\n\n```txt\nsymbol = $fromAI('parameters0_Value', '', 'string')\nlimit  = $fromAI('parameters1_Value', 100, 'number')\n```\n\n**Notes:** For older trades, use `/historicalTrades`."
      },
      "typeVersion": 1
    },
    {
      "id": "3a6d0368-3f19-4944-b1ea-b5e95c7f1d70",
      "name": "Calculateur",
      "type": "@n8n/n8n-nodes-langchain.toolCalculator",
      "position": [
        1520,
        592
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "436f3978-dcb9-465a-9e7e-d4d49d9b0d7d",
      "name": "Réflexion",
      "type": "@n8n/n8n-nodes-langchain.toolThink",
      "position": [
        1808,
        592
      ],
      "parameters": {
        "description": "### 🏷 Tool: **Think**\n\n**Purpose:**\n\n* Lightweight **reasoning helper**.\n* Lets the AI Agent process intermediate logic, format outputs, or decide how to combine multiple API results before sending the final report.\n* Does not fetch data itself.\n\n**Use cases:**\n\n* Clean/reshape JSON from Binance endpoints\n* Extract only the needed fields (e.g., `lastPrice`, `volume`)\n* Help prepare data for Telegram message formatting\n\n**n8n setup notes:**\n\n* No API call, just an **AI Tool** node.\n* Connect upstream API results → Think → Report Agent."
      },
      "typeVersion": 1.1
    },
    {
      "id": "4c373cc1-06ab-4cbd-82bb-7823e55760a4",
      "name": "Note adhésive15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1440,
        512
      ],
      "parameters": {
        "color": 6,
        "height": 836,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n### **Calculator**\n\n**Purpose:**\n\n* Perform **math operations** inside the workflow.\n* Supports add/subtract/multiply/divide, percentages, rounding, etc.\n\n**Use cases:**\n\n* Calculate spreads (ask – bid)\n* Compute % changes from open vs. last price\n* Normalize volumes or confidence scores\n\n**n8n setup notes:**\n\n* Node: `Calculator` (n8n built-in)\n* Input fields can come from Binance API JSON\n* Output can be chained into Think → Final Report\n"
      },
      "typeVersion": 1
    },
    {
      "id": "5bd35b82-f3ca-4d59-a562-c9a14ebd5138",
      "name": "Note adhésive16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1728,
        512
      ],
      "parameters": {
        "color": 6,
        "height": 932,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n### **Think**\n\n**Purpose:**\n\n* Lightweight **reasoning helper**.\n* Lets the AI Agent process intermediate logic, format outputs, or decide how to combine multiple API results before sending the final report.\n* Does not fetch data itself.\n\n**Use cases:**\n\n* Clean/reshape JSON from Binance endpoints\n* Extract only the needed fields (e.g., `lastPrice`, `volume`)\n* Help prepare data for Telegram message formatting\n\n**n8n setup notes:**\n\n* No API call, just an **AI Tool** node.\n* Connect upstream API results → Think → Report Agent."
      },
      "typeVersion": 1
    },
    {
      "id": "2f34b2fc-6184-4e45-853e-fbed94aa8bdc",
      "name": "Note adhésive17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2240,
        -1168
      ],
      "parameters": {
        "width": 1584,
        "height": 3584,
        "content": "# 📘 Binance AI Agent v1.02 — Documentation\n\n## 🔹 Overview\n\nThis workflow connects a **Telegram Bot** to Binance’s Spot Market REST API using an **AI-powered Agent**.\nIt allows you to fetch **real-time market data** (prices, stats, order book, trades, klines, etc.), process it through **OpenAI**, and deliver **clean formatted reports** back to Telegram.\n\n---\n\n## ⚡ Workflow Flow\n\n1. **Telegram Trigger**\n\n   * Listens for incoming Telegram messages.\n   * Passes raw user text downstream.\n\n2. **User Authentication**\n\n   * Verifies sender’s Telegram ID against a whitelist.\n   * Unauthorized users are blocked.\n\n3. **Session Setup**\n\n   * Creates `sessionId` from Telegram `chat.id`.\n   * Attaches user message text.\n   * Enables memory across multiple turns.\n\n4. **Binance AI Agent**\n\n   * Core orchestrator.\n   * Fetches live data directly from Binance API.\n   * Uses OpenAI only to **format results**, not to trade/analyze.\n   * Responds in **Telegram HTML format**.\n\n5. **Message Splitter**\n\n   * Ensures Telegram’s 4000-character limit isn’t exceeded.\n   * Splits long responses into safe chunks.\n\n6. **Telegram Send**\n\n   * Delivers the final formatted report (or multiple chunks) back to the authorized user.\n\n---\n\n## 🧠 Memory & Reasoning\n\n* **Simple Memory**\n  Stores `sessionId`, requested symbol, and context for multi-turn Telegram chats.\n\n* **OpenAI Chat Model (gpt-4.1-mini)**\n  Handles reasoning, structuring, and output formatting.\n\n* **Think Tool**\n  Helps reshape JSON, pick relevant fields, and prepare clean messages.\n\n* **Calculator Tool**\n  Used for spreads, % changes, and simple math on Binance results.\n\n---\n\n## 🔗 Binance API Endpoints Used\n\nAll requests are **HTTP GET** with **JSON responses**.\nSymbols are always uppercase (e.g., `BTCUSDT`).\n\n1. **Price (Latest)**\n   `GET /api/v3/ticker/price?symbol=BTCUSDT`\n\n   * Latest trade price.\n   * Weight: 2\n\n2. **24h Stats**\n   `GET /api/v3/ticker/24hr?symbol=BTCUSDT`\n\n   * Open, High, Low, Last, Volume, % Change.\n   * Weight: 2\n\n3. **Order Book Depth**\n   `GET /api/v3/depth?symbol=BTCUSDT&limit=100`\n\n   * Top bids/asks (default 100, max 5000).\n   * Weight: 5–250 depending on limit.\n\n4. **Best Bid/Ask (Book Ticker)**\n   `GET /api/v3/ticker/bookTicker?symbol=BTCUSDT`\n\n   * Best bid/ask + sizes.\n   * Weight: 2\n\n5. **Klines (Candles)**\n   `GET /api/v3/klines?symbol=BTCUSDT&interval=15m&limit=20`\n\n   * O/H/L/C data per interval.\n   * Default 500, we set 20.\n   * Weight: 2\n\n6. **Average Price**\n   `GET /api/v3/avgPrice?symbol=BTCUSDT`\n\n   * Rolling average price.\n   * Weight: 2\n\n7. **Recent Trades**\n   `GET /api/v3/trades?symbol=BTCUSDT&limit=100`\n\n   * Most recent trades (default 500, max 1000).\n   * Weight: 25\n\n---\n\n## 📤 Output Format (Telegram HTML)\n\nEach response starts with:\n\n```html\n<b>BTCUSDT — Binance Spot Data</b>\n```\n\nExample structure:\n\n```html\n<b>Price</b>\n• Last: 43650.23\n• Avg: 43640.18\n• Change (24h): +1.35%\n\n<b>24h Stats</b>\n• Open: 43000 • High: 44000 • Low: 42500 • Close: 43650\n• Volume: 12,345 BTC • Quote Vol: 532M USDT\n\n<b>Order Book (Top 5)</b>\n• Bids: [43640 × 1.2] …\n• Asks: [43660 × 0.9] …\n\n<b>Klines (latest 20)</b>\n• Interval: 15m (O/H/L/C per candle)\n```\n\n---\n\n## ⚠️ Rules & Restrictions\n\n* ✅ Always call Binance’s official API.\n* ✅ Present data clearly (HTML for Telegram).\n* ❌ Do not analyze or recommend trades.\n* ❌ Do not output raw JSON.\n* ❌ Do not fabricate values.\n* ⚠️ Show `N/A` if data unavailable.\n\n---\n\n## 🚀 Support & Licensing\n\n🔗 **Don Jayamaha – LinkedIn**\n[linkedin.com/in/donjayamahajr](http://linkedin.com/in/donjayamahajr)\n\n© 2025 Treasurium Capital Limited Company.\nAll rights reserved. This system architecture, prompts, and workflow structure are proprietary and protected by **U.S. copyright law**.\nReuse or resale prohibited without license.\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "ff8759fa-4140-4c14-835b-587f5ac0c3ac",
  "connections": {
    "436f3978-dcb9-465a-9e7e-d4d49d9b0d7d": {
      "ai_tool": [
        [
          {
            "node": "ea3ea33a-d3cc-4360-8351-c0791cf38e7b",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "1133028f-0755-4820-94ac-e4b59a101562": {
      "ai_tool": [
        [
          {
            "node": "ea3ea33a-d3cc-4360-8351-c0791cf38e7b",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "3a6d0368-3f19-4944-b1ea-b5e95c7f1d70": {
      "ai_tool": [
        [
          {
            "node": "ea3ea33a-d3cc-4360-8351-c0791cf38e7b",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "516159d8-484f-4df2-9dc1-c844cc15630f": {
      "ai_tool": [
        [
          {
            "node": "ea3ea33a-d3cc-4360-8351-c0791cf38e7b",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "5c6076d8-cfef-4199-946e-8491a86ad0d9": {
      "ai_tool": [
        [
          {
            "node": "ea3ea33a-d3cc-4360-8351-c0791cf38e7b",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "f6094f0e-9cff-40d2-bbb3-43d9c5d38a0b": {
      "ai_tool": [
        [
          {
            "node": "ea3ea33a-d3cc-4360-8351-c0791cf38e7b",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "062407b4-b9db-4285-ade5-f3010d566737": {
      "ai_memory": [
        [
          {
            "node": "ea3ea33a-d3cc-4360-8351-c0791cf38e7b",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "ec3490ea-99f6-4b8b-afac-8d7019f44fe4": {
      "ai_tool": [
        [
          {
            "node": "ea3ea33a-d3cc-4360-8351-c0791cf38e7b",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "e396c95d-f49d-4e6a-bb63-d37b5bfb33fa": {
      "main": [
        [
          {
            "node": "ea3ea33a-d3cc-4360-8351-c0791cf38e7b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ead793de-1050-4ab3-aeab-b0d6cbb95918": {
      "ai_tool": [
        [
          {
            "node": "ea3ea33a-d3cc-4360-8351-c0791cf38e7b",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "18d8ac71-19de-4075-ae4e-b4ef7a1ff408": {
      "ai_tool": [
        [
          {
            "node": "ea3ea33a-d3cc-4360-8351-c0791cf38e7b",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "76a4db9d-5a82-4647-b98c-c87e779f275b": {
      "main": [
        [
          {
            "node": "60601a5d-9f40-4bbf-97a5-7513ac6fd385",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ea3ea33a-d3cc-4360-8351-c0791cf38e7b": {
      "main": [
        [
          {
            "node": "e233cb3c-98fd-423a-bbbc-b043528e5920",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "94403c10-3da3-4fd8-b6c3-cdf046f0a4d0": {
      "ai_languageModel": [
        [
          {
            "node": "ea3ea33a-d3cc-4360-8351-c0791cf38e7b",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "60601a5d-9f40-4bbf-97a5-7513ac6fd385": {
      "main": [
        [
          {
            "node": "e396c95d-f49d-4e6a-bb63-d37b5bfb33fa",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e233cb3c-98fd-423a-bbbc-b043528e5920": {
      "main": [
        [
          {
            "node": "928b463d-3135-461e-8248-ddba9272eeed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - Trading crypto, Chatbot IA, IA Multimodale

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds35
Catégorie3
Types de nœuds11
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Auteur
Don Jayamaha Jr

Don Jayamaha Jr

@don-the-gem-dealer

With 12 years of experience as a Blockchain Strategist and Web3 Architect, I specialize in bridging the gap between traditional industries and decentralized technologies. My expertise spans tokenized assets, crypto payment integrations, and blockchain-driven market solutions.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34