Workflow: Play with Spotify from Telegram
Integrations: if, merge, noOp, set, spotify, stickyNote, stopAndError, telegram, telegramTrigger

{"id": "F7CfIF10XjXhqbGb", "meta": {"instanceId": "workflow-a09a9b6d", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:57.162461", "updatedAt": "2025-09-29T07:07:57.162479", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "Play with Spotify from Telegram", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "0395b3e4-94ef-49ea-9b4c-8f908e62f8c6", "name": "Telegram Trigger", "type": "n8n-nodes-base.telegramTrigger", "position": [-60, 20], "webhookId": "e7aa284b-5eef-4ac1-94bf-8e4d307a3b14", "parameters": {"updates": ["message"], "additionalFields": {}}, "credentials": {"telegramApi": {"id": "gblW5oACGEPuccja", "name": "Telegram account"}}, "typeVersion": 1.1, "notes": "This telegramTrigger node performs automated tasks as part of the workflow."}, {"id": "263edf45-58a0-45e8-91f8-601bc62c7d6f", "name": "OpenAI - Ask about a track", "type": "n8n-nodes-base.noOp", "position": [120, -120], "parameters": {"modelId": {"__rl": true, "mode": "list", "value": "gpt-4o-mini", "cachedResultName": "GPT-4O-MINI"}, "options": {}, "messages": {"values": [{"content": "=get artist and song name from '{{ $json.message.text }}'. Reply only eg. 'track:song name artist:artist name'"}]}}, "credentials": {"openAiApi": {"id": "vDcge3EgslxfX3EC", "name": "OpenAi account"}}, "typeVersion": 1.6, "notes": "This openAi node performs automated tasks as part of the workflow."}, {"id": "086aef8b-533a-4c33-9952-29d5adb152c8", "name": "Search track", "type": "n8n-nodes-base.spotify", "onError": "continueErrorOutput", "position": [540, -200], "parameters": {"limit": 1, "query": "={{ $json.message.content }}", "filters": {}, "resource": "track", "operation": "search"}, "credentials": {"spotifyOAuth2Api": {"id": "wylKghFNQa8IKy1U", "name": "Spotify account"}}, "typeVersion": 1, "alwaysOutputData": true, "notes": "This spotify node performs automated tasks as part of the workflow."}, {"id": "08af6055-ba52-4cb2-a561-ea04ac55279f", "name": "Add song", "type": "n8n-nodes-base.spotify", "onError": "continueErrorOutput", "position": [780, -240], "parameters": {"id": "=spotify:track:{{ $json.id }}"}, "credentials": {"spotifyOAuth2Api": {"id": "wylKghFNQa8IKy1U", "name": "Spotify account"}}, "typeVersion": 1, "notes": "This spotify node performs automated tasks as part of the workflow."}, {"id": "2dbdafa4-3b6f-4a14-813c-4e10da10abad", "name": "Next Song", "type": "n8n-nodes-base.spotify", "onError": "continueErrorOutput", "position": [980, -280], "parameters": {"operation": "nextSong"}, "credentials": {"spotifyOAuth2Api": {"id": "wylKghFNQa8IKy1U", "name": "Spotify account"}}, "typeVersion": 1, "notes": "This spotify node performs automated tasks as part of the workflow."}, {"id": "cb8d42aa-0c7e-45a5-90b5-b91e483dd13a", "name": "Resume play", "type": "n8n-nodes-base.spotify", "notes": "We don't have to stop here on error. An error is thrown from Spotify if the player is already playing.", "onError": "continueRegularOutput", "position": [1240, -380], "parameters": {"operation": "resume"}, "credentials": {"spotifyOAuth2Api": {"id": "wylKghFNQa8IKy1U", "name": "Spotify account"}}, "typeVersion": 1}, {"id": "089e1070-b013-454c-9f6c-55b909e06c1d", "name": "Currently Playing", "type": "n8n-nodes-base.spotify", "onError": "continueErrorOutput", "position": [1420, -300], "parameters": {"operation": "currentlyPlaying"}, "credentials": {"spotifyOAuth2Api": {"id": "wylKghFNQa8IKy1U", "name": "Spotify account"}}, "typeVersion": 1, "notes": "This spotify node performs automated tasks as part of the workflow."}, {"id": "e9df0dcf-b166-45a3-910b-787b3718bbcf", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [120, -300], "parameters": {"color": 5, "width": 254.05813953488382, "content": "## Telegram to Spotify \nAsk AI about a track with artist and song name or if you can't remember describe it and AI does it's thing.\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "77bae9be-2d92-4028-ae78-7887b6a2d394", "name": "Merge", "type": "n8n-nodes-base.merge", "position": [440, 220], "parameters": {"mode": "combine", "options": {}, "combineBy": "combineAll"}, "typeVersion": 3, "notes": "This merge node performs automated tasks as part of the workflow."}, {"id": "0d95000d-7efd-402a-9a34-47ababb2f53e", "name": "If Node", "type": "n8n-nodes-base.if", "position": [620, -440], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "02af5387-07d2-4a16-bd83-e1359d091165", "operator": {"type": "string", "operation": "notEmpty", "singleValue": true}, "leftValue": "={{ $json?.id }}", "rightValue": ""}]}}, "typeVersion": 2.2, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "363f89ad-34d0-4445-8ff3-693d991dad09", "name": "Message parser", "type": "n8n-nodes-base.set", "position": [1280, -40], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "93cd2545-c6e9-4717-96b7-d49eb056ac70", "name": "message", "type": "string", "value": "={{ $json.error }}"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "8b80f80d-8c8e-44de-9838-6d05199bb734", "name": "Not found error message", "type": "n8n-nodes-base.set", "position": [880, -460], "parameters": {"mode": "raw", "options": {}, "jsonOutput": "{\n  \"error\": \"Song not found\"\n}\n"}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "f1785140-8e97-43e1-9d84-aedc8b8d5e06", "name": "Return message to Telegram", "type": "n8n-nodes-base.telegram", "position": [760, 220], "parameters": {"text": "={{ $('Message parser').item.json.message }}", "chatId": "={{ $json.message.chat.id }}", "additionalFields": {}}, "credentials": {"telegramApi": {"id": "gblW5oACGEPuccja", "name": "Telegram account"}}, "typeVersion": 1.2, "notes": "This telegram node performs automated tasks as part of the workflow."}, {"id": "e3e16535-094b-41bf-88c6-166bb6805d53", "name": "Define Now Playing", "type": "n8n-nodes-base.set", "notes": "We use the object \"error\" as a returned bject so we can re-use the Message Parser node.", "position": [1660, -240], "parameters": {"mode": "raw", "options": {}, "jsonOutput": "={\n  \"error\": \"Now playing {{ $json.item.name }} - {{ $json.item.artists[0].name }} - {{ $json.item.album.name }}\"\n}\n"}, "typeVersion": 3.4}, {"id": "error-a6dc8ede", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "active": true, "pinData": {}, "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "6f219c9e-f17a-45b1-ab8d-09d991fd8e34", "connections": {"0395b3e4-94ef-49ea-9b4c-8f908e62f8c6": {"main": [[{"node": "error-handler-0395b3e4-94ef-49ea-9b4c-8f908e62f8c6-5f2040e0", "type": "main", "index": 0}]]}, "263edf45-58a0-45e8-91f8-601bc62c7d6f": {"main": [[{"node": "error-handler-263edf45-58a0-45e8-91f8-601bc62c7d6f-f3c2164f", "type": "main", "index": 0}]]}, "f1785140-8e97-43e1-9d84-aedc8b8d5e06": {"main": [[{"node": "error-handler-f1785140-8e97-43e1-9d84-aedc8b8d5e06-d359f1a6", "type": "main", "index": 0}]]}}, "description": "Automated workflow: Play with Spotify from Telegram. This workflow integrates 9 different services: telegramTrigger, stickyNote, telegram, merge, set. It contains 17 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Play with Spotify from Telegram. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}