| { |
| "name": "Snapchat Bot", |
| "nodes": [ |
| { |
| "parameters": { |
| "authentication": "headerAuth", |
| "httpMethod": "POST", |
| "path": "snapchat-webhook", |
| "options": {} |
| }, |
| "name": "Webhook", |
| "type": "n8n-nodes-base.webhook", |
| "typeVersion": 1, |
| "position": [250, 300] |
| }, |
| { |
| "parameters": { |
| "jsCode": "// Extract Snapchat data with error handling\ntry {\n const data = $input.all()[0].json.body;\n\n if (!data?.sender_id || !data?.message_content) {\n throw new Error('Invalid message format');\n }\n\n return {\n json: {\n type: 'snapchat',\n platform: 'snapchat',\n sender: data.sender_id,\n message: data.message_content,\n mediaType: data.media_type,\n mediaUrl: data.media_url,\n timestamp: Date.now(),\n conversationId: data.conversation_id\n }\n };\n} catch (error) {\n // Return graceful error in Melisandre's style\n return {\n json: {\n error: true,\n message: 'The flames show distortion in your message. Let us seek clarity together, for the night is dark and full of terrors.',\n sender: $input.all()[0]?.json?.body?.sender_id,\n type: 'snapchat',\n platform: 'snapchat',\n timestamp: Date.now(),\n conversationId: $input.all()[0]?.json?.body?.conversation_id\n }\n };\n}" |
| }, |
| "name": "Process Snapchat Data", |
| "type": "n8n-nodes-base.code", |
| "typeVersion": 1, |
| "position": [450, 300] |
| }, |
| { |
| "parameters": { |
| "conditions": { |
| "boolean": [ |
| { |
| "value1": "={{$input.item.json.error}}", |
| "value2": true |
| } |
| ] |
| } |
| }, |
| "name": "Check Error", |
| "type": "n8n-nodes-base.if", |
| "typeVersion": 1, |
| "position": [650, 300] |
| }, |
| { |
| "parameters": { |
| "url": "http://localhost:5678/webhook/ai-process", |
| "authentication": "none", |
| "method": "POST", |
| "jsonParameters": true, |
| "options": {}, |
| "bodyParameters": { |
| "parameters": [ |
| { |
| "name": "message", |
| "value": "={{$input.item.json.message}}" |
| }, |
| { |
| "name": "sender", |
| "value": "={{$input.item.json.sender}}" |
| }, |
| { |
| "name": "platform", |
| "value": "snapchat" |
| } |
| ] |
| } |
| }, |
| "name": "Call AI Processing", |
| "type": "n8n-nodes-base.httpRequest", |
| "typeVersion": 1, |
| "position": [850, 300] |
| }, |
| { |
| "parameters": { |
| "authentication": "headerAuth", |
| "url": "=https://adsapi.snapchat.com/v1/conversations/{{$input.item.json.conversationId}}/messages", |
| "headerParameters": { |
| "parameters": [ |
| { |
| "name": "Authorization", |
| "value": "=Bearer {{$env.SNAPCHAT_ACCESS_TOKEN}}" |
| } |
| ] |
| }, |
| "jsonParameters": true, |
| "options": {}, |
| "bodyParameters": { |
| "parameters": [ |
| { |
| "name": "message", |
| "value": "={{$input.item.json.error ? $input.item.json.message : $node[\"Call AI Processing\"].json.response}}" |
| }, |
| { |
| "name": "recipient_id", |
| "value": "={{$input.item.json.sender}}" |
| }, |
| { |
| "name": "message_type", |
| "value": "text" |
| } |
| ] |
| } |
| }, |
| "name": "Send Snapchat Response", |
| "type": "n8n-nodes-base.httpRequest", |
| "typeVersion": 1, |
| "position": [1050, 300] |
| }, |
| { |
| "parameters": { |
| "functionCode": "// Log error for monitoring\nconsole.error('Snapchat Bot Error:', $input.item.json);\n\n// Return original item to continue workflow\nreturn $input.item;" |
| }, |
| "name": "Log Error", |
| "type": "n8n-nodes-base.function", |
| "typeVersion": 1, |
| "position": [850, 450] |
| }, |
| { |
| "parameters": { |
| "functionCode": "// Handle media content if present\nif ($input.item.json.mediaType && $input.item.json.mediaUrl) {\n try {\n // Process media content here\n // For now, just acknowledge it in Melisandre's style\n const mediaResponse = 'I see visions in the content you've shared. The Lord of Light speaks through many mediums.';\n \n return {\n json: {\n ...$input.item.json,\n message: $input.item.json.message + '\\n\\n' + mediaResponse\n }\n };\n } catch (error) {\n console.error('Media processing error:', error);\n }\n}\n\nreturn $input.item;" |
| }, |
| "name": "Process Media", |
| "type": "n8n-nodes-base.function", |
| "typeVersion": 1, |
| "position": [450, 450] |
| } |
| ], |
| "connections": { |
| "Webhook": { |
| "main": [ |
| [ |
| { |
| "node": "Process Snapchat Data", |
| "type": "main", |
| "index": 0 |
| } |
| ] |
| ] |
| }, |
| "Process Snapchat Data": { |
| "main": [ |
| [ |
| { |
| "node": "Process Media", |
| "type": "main", |
| "index": 0 |
| } |
| ] |
| ] |
| }, |
| "Process Media": { |
| "main": [ |
| [ |
| { |
| "node": "Check Error", |
| "type": "main", |
| "index": 0 |
| } |
| ] |
| ] |
| }, |
| "Check Error": { |
| "main": [ |
| [ |
| { |
| "node": "Log Error", |
| "type": "main", |
| "index": 0 |
| } |
| ], |
| [ |
| { |
| "node": "Call AI Processing", |
| "type": "main", |
| "index": 0 |
| } |
| ] |
| ] |
| }, |
| "Call AI Processing": { |
| "main": [ |
| [ |
| { |
| "node": "Send Snapchat Response", |
| "type": "main", |
| "index": 0 |
| } |
| ] |
| ] |
| }, |
| "Log Error": { |
| "main": [ |
| [ |
| { |
| "node": "Send Snapchat Response", |
| "type": "main", |
| "index": 0 |
| } |
| ] |
| ] |
| } |
| } |
| } |
|
|