{"workflow":{"id":14914,"name":"Plan voice-based travel and calendar bookings with Claude AI","views":0,"recentViews":0,"totalViews":0,"createdAt":"2026-04-08T13:24:10.425Z","description":"A hands-free travel planning assistant that accepts voice messages via WhatsApp and Telegram, understands natural language travel requests, searches across multiple providers, and automatically books to your calendar with smart recommendations.\n\n### How it works\n\n1. **Voice Message Reception** - WhatsApp/Telegram webhooks capture incoming voice notes and calls\n2. **Audio Transcription** - Converts voice to text using OpenAI Whisper or Google Speech-to-Text\n3. **Intent Classification** - Claude AI analyzes the request to determine travel intent and parameters\n4. **Context Enrichment** - Pulls user preferences, past trips, and budget profiles from database\n5. **Multi-Source Travel Search** - Queries flights (Skyscanner), hotels (Booking.com), activities in parallel\n6. **Smart Filtering & Ranking** - AI applies user preferences, budget constraints, and optimal timing\n7. **Natural Response Generation** - Claude crafts conversational voice-friendly responses\n8. **Calendar Auto-Add** - Creates Google Calendar events with travel details and reminders\n9. **Voice Response Delivery** - Sends text + voice message back via original messaging platform\n10. **Confirmation & Booking Links** - Provides quick-action buttons for booking or modifying search\n11. **Proactive Follow-ups** - Sends price drop alerts and departure reminders\n12. **Multi-Turn Conversation** - Maintains context for refinement requests\n\n### Setup Steps\n\n1. Import workflow into n8n\n2. Configure credentials:\n   - **Anthropic API** - Claude AI for NLP and response generation\n   - **OpenAI API** - Whisper for voice transcription\n   - **WhatsApp Business API** - Voice message reception and sending\n   - **Telegram Bot API** - Alternative messaging platform\n   - **Google Calendar API** - Automatic event creation\n   - **Flight Search API** - Skyscanner, Amadeus, or Kiwi.com\n   - **Hotel API** - Booking.com or Hotels.com partner API\n   - **Google Sheets** - User preferences and conversation history\n   - **MongoDB or PostgreSQL** - Conversation state management\n3. Set up WhatsApp Business account and webhook\n4. Create Telegram bot via @BotFather\n5. Configure Google Calendar shared calendar for travel\n6. Populate user preferences sheet with defaults\n7. Set API keys for travel search providers\n8. Activate workflow and test with sample voice message\n\n### Sample Voice Requests\n\n**Simple Flight Search:**\n\"Hey, find me cheap flights to Paris next month\"\n\n**Complex Multi-City:**\n\"I need to go to Tokyo in March for a week, then Bangkok for 3 days, budget is $2000 total\"\n\n**Hotel Only:**\n\"Book a hotel in Barcelona for May 15th to 20th, somewhere near the beach under $150 per night\"\n\n**Full Package:**\n\"Plan a romantic weekend in Santorini for our anniversary in June, nice hotel with sunset view, under $3000 for two people\"\n\n**Activity Search:**\n\"What are the best things to do in Amsterdam for 3 days, we like museums and food tours\"\n\n**Calendar Query:**\n\"When am I flying to London next month? And can you add a reminder 2 days before?\"\n\n### Voice Message Webhook Payload\n```json\n{\n  \"platform\": \"whatsapp\",\n  \"messageId\": \"wamid.ABC123XYZ\",\n  \"from\": \"+15551234567\",\n  \"timestamp\": 1735804800,\n  \"type\": \"audio\",\n  \"audio\": {\n    \"id\": \"audio_id_12345\",\n    \"mimeType\": \"audio/ogg\",\n    \"sha256\": \"abc123...\",\n    \"duration\": 15,\n    \"url\": \"https://media.whatsapp.com/audio/abc123\"\n  },\n  \"context\": {\n    \"conversationId\": \"conv-user-001\",\n    \"previousMessageId\": null\n  }\n}\n```\n\n### Enterprise Features\n\n**Voice Intelligence:**\n- Multi-language transcription (30+ languages)\n- Accent-adaptive recognition\n- Background noise filtering\n- Speaker emotion detection for urgency\n\n**Smart Travel Search:**\n- Multi-provider aggregation (flights, hotels, activities)\n- Real-time price comparison\n- Flexible date search (±3 days optimization)\n- Budget-aware filtering\n- Loyalty program integration\n\n**AI-Powered Personalization:**\n- Learns from past bookings and preferences\n- Remembers dietary restrictions, seating preferences\n- Adapts to budget patterns\n- Suggests destinations based on season and interests\n\n**Proactive Assistance:**\n- Price drop alerts for saved searches\n- Flight delay notifications\n- Weather warnings before departure\n- Packing list generation\n- Travel insurance reminders\n\n**Calendar Intelligence:**\n- Conflict detection with existing events\n- Travel time buffer insertion\n- Timezone-aware scheduling\n- Shared calendar support for group trips\n- Automatic itinerary attachment\n\n**Security & Privacy:**\n- End-to-end encryption for voice messages\n- PII redaction in logs\n- Secure credential storage\n- GDPR-compliant data handling\n- User data deletion on request\n\n**Multi-Platform Support:**\n- WhatsApp Business\n- Telegram\n- Facebook Messenger\n- SMS fallback\n- Web widget integration","workflow":{"id":"a8tblGbKxqvTjRTe","meta":{"instanceId":"dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281","templateCredsSetupCompleted":true},"name":"Voice-Activated Travel Assistant with Claude AI","tags":[],"nodes":[{"id":"62124a33-21f9-4aea-8a63-e0c3fdbb5092","name":"Main Documentation","type":"n8n-nodes-base.stickyNote","position":[-16,304],"parameters":{"width":820,"height":992,"content":"## Voice-Activated Travel Assistant with Claude AI\n\nA hands-free travel planning assistant that accepts voice messages via WhatsApp and Telegram, understands natural language travel requests, searches across multiple providers, and automatically books to your calendar with smart recommendations.\n\n### How it works\n\n1. **Voice Message Reception** - WhatsApp/Telegram webhooks capture incoming voice notes and calls\n2. **Audio Transcription** - Converts voice to text using OpenAI Whisper or Google Speech-to-Text\n3. **Intent Classification** - Claude AI analyzes the request to determine travel intent and parameters\n4. **Context Enrichment** - Pulls user preferences, past trips, and budget profiles from database\n5. **Multi-Source Travel Search** - Queries flights (Skyscanner), hotels (Booking.com), activities in parallel\n6. **Smart Filtering & Ranking** - AI applies user preferences, budget constraints, and optimal timing\n7. **Natural Response Generation** - Claude crafts conversational voice-friendly responses\n8. **Calendar Auto-Add** - Creates Google Calendar events with travel details and reminders\n9. **Voice Response Delivery** - Sends text + voice message back via original messaging platform\n10. **Confirmation & Booking Links** - Provides quick-action buttons for booking or modifying search\n11. **Proactive Follow-ups** - Sends price drop alerts and departure reminders\n12. **Multi-Turn Conversation** - Maintains context for refinement requests\n\n### Setup Steps\n\n1. Import workflow into n8n\n2. Configure credentials:\n   - **Anthropic API** - Claude AI for NLP and response generation\n   - **OpenAI API** - Whisper for voice transcription\n   - **WhatsApp Business API** - Voice message reception and sending\n   - **Telegram Bot API** - Alternative messaging platform\n   - **Google Calendar API** - Automatic event creation\n   - **Flight Search API** - Skyscanner, Amadeus, or Kiwi.com\n   - **Hotel API** - Booking.com or Hotels.com partner API\n   - **Google Sheets** - User preferences and conversation history\n   - **MongoDB or PostgreSQL** - Conversation state management\n3. Set up WhatsApp Business account and webhook\n4. Create Telegram bot via @BotFather\n5. Configure Google Calendar shared calendar for travel\n6. Populate user preferences sheet with defaults\n7. Set API keys for travel search providers\n8. Activate workflow and test with sample voice message\n\n"},"typeVersion":1},{"id":"512961ee-0137-4997-b9f8-65253b9a4610","name":"Section 1 Header","type":"n8n-nodes-base.stickyNote","position":[992,624],"parameters":{"color":3,"width":616,"height":420,"content":"## 1. Voice Reception & Transcription"},"typeVersion":1},{"id":"a3165670-3a26-4933-aa44-59554ef72814","name":"Section 2 Header","type":"n8n-nodes-base.stickyNote","position":[1634,144],"parameters":{"color":5,"width":780,"height":1168,"content":"## 2. NLP Understanding & Context Enrichment"},"typeVersion":1},{"id":"c00db148-c476-4605-9b54-ce4dae6b7990","name":"Section 3 Header","type":"n8n-nodes-base.stickyNote","position":[2432,304],"parameters":{"color":3,"width":1104,"height":1020,"content":"## 3. Multi-Source Travel Search & Smart Ranking"},"typeVersion":1},{"id":"7ed73a54-5ffc-428f-acf2-f9820b920766","name":"Section 4 Header","type":"n8n-nodes-base.stickyNote","position":[3584,400],"parameters":{"color":5,"width":980,"height":900,"content":"## 4. Response Generation, Calendar & Delivery"},"typeVersion":1},{"id":"1582a4c4-4f4c-4fbe-920d-25ceee00da31","name":"WhatsApp Voice Message Webhook","type":"n8n-nodes-base.webhook","position":[1056,716],"webhookId":"voice-travel-whatsapp","parameters":{"path":"whatsapp-voice","options":{},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":2},{"id":"c4224756-51c9-4d46-b171-3d8b7e79210e","name":"Telegram Voice Note Webhook","type":"n8n-nodes-base.webhook","position":[1056,908],"webhookId":"voice-travel-telegram","parameters":{"path":"telegram-voice","options":{},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":2},{"id":"7fb052d8-bd1b-4388-801f-854616d6cd5a","name":"Normalize Message Input","type":"n8n-nodes-base.code","position":[1280,864],"parameters":{"mode":"runOnceForEachItem","jsCode":"const body = $input.item.json.body || $input.item.json;\nconst headers = $input.item.json.headers || {};\n\n// Detect platform from webhook path or payload structure\nlet platform = 'unknown';\nlet audioUrl = null;\nlet senderId = null;\nlet messageId = null;\nlet audioMetadata = {};\n\nif (body.platform === 'whatsapp' || body.object === 'whatsapp_business_account') {\n  platform = 'whatsapp';\n  const message = body.entry?.[0]?.changes?.[0]?.value?.messages?.[0] || body;\n  senderId = message.from || body.from;\n  messageId = message.id || body.messageId;\n  \n  if (message.type === 'audio' || message.audio) {\n    const audio = message.audio || {};\n    audioUrl = audio.url || body.audio?.url;\n    audioMetadata = {\n      mimeType: audio.mime_type || audio.mimeType || 'audio/ogg',\n      duration: audio.duration || 0,\n      sha256: audio.sha256 || null\n    };\n  } else if (message.type === 'voice' || message.voice) {\n    const voice = message.voice || {};\n    audioUrl = voice.url || body.audio?.url;\n    audioMetadata = {\n      mimeType: 'audio/ogg',\n      duration: voice.duration || 0,\n      sha256: voice.sha256 || null\n    };\n  }\n} else if (body.update_id || body.message?.voice || body.platform === 'telegram') {\n  platform = 'telegram';\n  const message = body.message || body;\n  senderId = message.from?.id?.toString() || message.chat?.id?.toString() || body.from;\n  messageId = message.message_id?.toString() || body.messageId;\n  \n  if (message.voice) {\n    audioUrl = `https://api.telegram.org/file/bot${process.env.TELEGRAM_BOT_TOKEN}/${message.voice.file_path}`;\n    audioMetadata = {\n      mimeType: message.voice.mime_type || 'audio/ogg',\n      duration: message.voice.duration || 0,\n      fileId: message.voice.file_id\n    };\n  } else if (message.audio) {\n    audioUrl = `https://api.telegram.org/file/bot${process.env.TELEGRAM_BOT_TOKEN}/${message.audio.file_path}`;\n    audioMetadata = {\n      mimeType: message.audio.mime_type || 'audio/mpeg',\n      duration: message.audio.duration || 0,\n      fileId: message.audio.file_id\n    };\n  }\n}\n\nif (!audioUrl) {\n  throw new Error(`No audio/voice message found in ${platform} webhook payload`);\n}\n\nif (!senderId) {\n  throw new Error('Unable to identify sender from webhook payload');\n}\n\n// Normalize sender ID to E.164 format if possible\nlet normalizedSenderId = senderId;\nif (platform === 'whatsapp' && !senderId.startsWith('+')) {\n  normalizedSenderId = '+' + senderId;\n}\n\nconst normalizedMessage = {\n  messageId: `${platform}-${messageId || Date.now()}`,\n  platform,\n  senderId: normalizedSenderId,\n  audioUrl,\n  audioMetadata,\n  receivedAt: new Date().toISOString(),\n  conversationId: body.context?.conversationId || `conv-${normalizedSenderId}`,\n  isFollowUp: !!body.context?.previousMessageId,\n  previousMessageId: body.context?.previousMessageId || null,\n  webhookSource: $node.name,\n  rawPayload: body\n};\n\nreturn { json: { normalizedMessage } };"},"typeVersion":2},{"id":"4b9e55f0-1e71-462b-9bd4-bf322cd1b7c9","name":"Download Audio File","type":"n8n-nodes-base.httpRequest","position":[1504,864],"parameters":{"url":"={{ $json.normalizedMessage.audioUrl }}","options":{"timeout":30000,"response":{"response":{"responseFormat":"file"}}},"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"rJ0YUgA7qjQmQxfT","name":"n8n"}},"typeVersion":4.2},{"id":"ff409526-8edc-4101-b1e0-29a2bdf787ee","name":"Transcribe Audio with OpenAI Whisper","type":"n8n-nodes-base.httpRequest","position":[1792,768],"parameters":{"url":"https://api.openai.com/v1/audio/transcriptions","method":"POST","options":{"timeout":60000},"sendBody":true,"contentType":"multipart-form-data","authentication":"genericCredentialType","bodyParameters":{"parameters":[{"name":"file","value":"={{ $binary.data }}"},{"name":"model","value":"whisper-1"},{"name":"language","value":"auto"},{"name":"response_format","value":"verbose_json"},{"name":"temperature","value":"0.2"}]},"genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"rJ0YUgA7qjQmQxfT","name":"n8n"}},"typeVersion":4.2},{"id":"7e5ca379-24e8-482b-b3eb-db2b4ff3cb8a","name":"Extract and Validate Transcription","type":"n8n-nodes-base.code","position":[2080,812],"parameters":{"mode":"runOnceForEachItem","jsCode":"const transcriptionResponse = $input.item.json;\nconst normalizedMessage = $('Normalize Message Input').item.json.normalizedMessage;\n\n// Extract transcription text\nconst transcribedText = transcriptionResponse.text || '';\nconst language = transcriptionResponse.language || 'en';\nconst duration = transcriptionResponse.duration || normalizedMessage.audioMetadata.duration || 0;\n\nif (!transcribedText || transcribedText.trim().length < 3) {\n  throw new Error('Transcription failed or audio was too short/unclear');\n}\n\n// Calculate confidence proxy from metadata\nconst segments = transcriptionResponse.segments || [];\nconst avgConfidence = segments.length > 0 \n  ? segments.reduce((sum, seg) => sum + (seg.no_speech_prob || 0), 0) / segments.length\n  : 0;\n\nconst transcriptionData = {\n  normalizedMessage,\n  transcription: {\n    text: transcribedText.trim(),\n    language,\n    duration,\n    wordCount: transcribedText.split(/\\s+/).length,\n    detectedLanguage: language,\n    confidenceScore: Math.round((1 - avgConfidence) * 100),\n    segments: segments.map(s => ({\n      text: s.text,\n      start: s.start,\n      end: s.end,\n      confidence: 1 - (s.no_speech_prob || 0)\n    }))\n  },\n  transcribedAt: new Date().toISOString()\n};\n\nreturn { json: transcriptionData };"},"typeVersion":2},{"id":"58f8ad36-238a-4317-a7c6-6d60b98f099d","name":"Claude AI Intent Classification & Entity Extraction","type":"@n8n/n8n-nodes-langchain.agent","position":[1728,368],"parameters":{"text":"=You are a travel intent classification and entity extraction engine with deep knowledge of travel terminology, destination names, date expressions, and natural language patterns.\n\nAnalyze this voice transcription and extract all travel-related information.\n\n**Transcribed Voice Message:**\n\"{{ $json.transcription.text }}\"\n\n**Metadata:**\n- Language: {{ $json.transcription.language }}\n- Duration: {{ $json.transcription.duration }}s\n- Confidence: {{ $json.transcription.confidenceScore }}%\n- User ID: {{ $json.normalizedMessage.senderId }}\n- Platform: {{ $json.normalizedMessage.platform }}\n- Is Follow-up: {{ $json.normalizedMessage.isFollowUp }}\n\n**Your Task:**\n1. Classify the primary travel intent (flight_search, hotel_search, activity_search, full_package, itinerary_query, price_alert, booking_modification, general_question)\n2. Extract all travel entities: destinations, dates, passenger count, budget, preferences\n3. Identify date flexibility (exact dates vs. flexible)\n4. Detect urgency level from tone and phrasing\n5. Extract any special requirements (dietary, accessibility, loyalty programs)\n6. Determine if this is a simple or complex multi-leg journey\n7. Identify any constraints (budget, time, companions)\n\n**Entity Extraction Guidelines:**\n- Dates: Convert natural language (\"next month\", \"in March\", \"June 15\") to structured format\n- Destinations: Resolve city names to IATA codes when possible, handle multi-city\n- Budget: Extract amount and currency, distinguish per-person vs. total\n- Preferences: Capture travel class, hotel stars, activity types\n- Duration: Convert \"a week\", \"3 days\" to exact night counts\n\n**Response Format (JSON only, no markdown):**\n{\n  \"primaryIntent\": \"flight_search\",\n  \"intentConfidence\": 95,\n  \"secondaryIntents\": [\"hotel_search\"],\n  \"travelType\": \"one_way | round_trip | multi_city\",\n  \"complexity\": \"simple | moderate | complex\",\n  \"urgencyLevel\": \"low | medium | high\",\n  \"destinations\": {\n    \"from\": {\n      \"city\": \"New York\",\n      \"country\": \"USA\",\n      \"iataCode\": \"NYC\",\n      \"confidence\": 100\n    },\n    \"to\": [\n      {\n        \"city\": \"Paris\",\n        \"country\": \"France\",\n        \"iataCode\": \"PAR\",\n        \"confidence\": 100\n      }\n    ],\n    \"multiCity\": []\n  },\n  \"dates\": {\n    \"departure\": {\n      \"exact\": \"2025-06-15\",\n      \"flexible\": true,\n      \"flexibilityDays\": 3,\n      \"originalPhrase\": \"next month\"\n    },\n    \"return\": {\n      \"exact\": \"2025-06-22\",\n      \"flexible\": true,\n      \"flexibilityDays\": 2,\n      \"originalPhrase\": \"a week later\"\n    },\n    \"duration\": {\n      \"nights\": 7,\n      \"originalPhrase\": \"for a week\"\n    }\n  },\n  \"passengers\": {\n    \"adults\": 2,\n    \"children\": 0,\n    \"infants\": 0\n  },\n  \"budget\": {\n    \"amount\": 2000,\n    \"currency\": \"USD\",\n    \"perPerson\": false,\n    \"category\": \"budget | economy | moderate | premium | luxury\",\n    \"originalPhrase\": \"under $2000 total\"\n  },\n  \"preferences\": {\n    \"flightClass\": \"economy | premium_economy | business | first\",\n    \"hotelStars\": 3,\n    \"hotelType\": \"hotel | resort | boutique | hostel | apartment\",\n    \"activities\": [\"museums\", \"food tours\", \"beach\"],\n    \"mealPreferences\": [],\n    \"accessibility\": [],\n    \"loyaltyPrograms\": []\n  },\n  \"specialRequirements\": [\n    \"vegetarian meals\",\n    \"window seat\"\n  ],\n  \"extractedEntities\": {\n    \"locations\": [\"Paris\"],\n    \"dates\": [\"next month\"],\n    \"numbers\": [2000],\n    \"timeExpressions\": [\"a week\"]\n  },\n  \"missingInformation\": [\n    \"departure city not specified, will use user profile default\"\n  ],\n  \"needsClarification\": false,\n  \"clarificationQuestions\": [],\n  \"conversationalTone\": \"casual | formal | urgent | exploratory\",\n  \"sentiment\": \"excited | neutral | frustrated | uncertain\"\n}","options":{"systemMessage":"You are a travel NLP expert. Extract all relevant travel information from natural language. Respond with valid JSON only — no markdown, no preamble."},"promptType":"define"},"typeVersion":1.6},{"id":"875e3164-9dda-492a-8aac-98365c721915","name":"Claude Sonnet 4 Model","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[3048,1088],"parameters":{"model":"claude-sonnet-4-20250514","options":{"temperature":0.7}},"credentials":{"anthropicApi":{"id":"fK55jZdb6CaYNukq","name":"Anthropic account - test"}},"typeVersion":1},{"id":"416ac6ff-85df-45d8-86e9-edb4aa1eea8a","name":"Fetch User Profile & Preferences","type":"n8n-nodes-base.googleSheets","position":[1792,960],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"user_profiles"},"documentId":{"__rl":true,"mode":"list","value":"YOUR_GOOGLE_SHEET_ID"}},"credentials":{"googleSheetsOAuth2Api":{"id":"sldw2qK7iVusK0rY","name":"Google Sheets account"}},"typeVersion":4.5,"continueOnFail":true},{"id":"6f389856-0fe5-477c-b5a6-b71ec92c9800","name":"Fetch Recent Conversation Context","type":"n8n-nodes-base.googleSheets","position":[1792,1152],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"conversation_history"},"documentId":{"__rl":true,"mode":"list","value":"YOUR_GOOGLE_SHEET_ID"}},"credentials":{"googleSheetsOAuth2Api":{"id":"sldw2qK7iVusK0rY","name":"Google Sheets account"}},"typeVersion":4.5,"continueOnFail":true},{"id":"5b519e3c-d56c-4ab0-a9d2-1fa9b4200114","name":"Merge Intent, Profile & Context","type":"n8n-nodes-base.code","position":[2304,812],"parameters":{"jsCode":"// Get intent classification\nconst intentRaw = $('Claude AI Intent Classification & Entity Extraction').item.json;\nlet intentText = intentRaw.response || intentRaw.output || intentRaw.text || '';\nif (intentRaw.content && Array.isArray(intentRaw.content)) {\n  intentText = intentRaw.content[0]?.text || '';\n}\nconst cleanIntent = intentText.replace(/```json\\s*/g, '').replace(/```\\s*/g, '').trim();\nconst travelIntent = JSON.parse(cleanIntent);\n\n// Get transcription data\nconst transcriptionData = $('Extract and Validate Transcription').item.json;\n\n// Get user profile\nconst userProfiles = $('Fetch User Profile & Preferences').all().map(i => i.json);\nconst senderId = transcriptionData.normalizedMessage.senderId;\nconst userProfile = userProfiles.find(p => p.phoneNumber === senderId || p.telegramId === senderId) || {\n  phoneNumber: senderId,\n  name: 'Unknown User',\n  defaultDepartureCity: 'Not Set',\n  preferredCurrency: 'USD',\n  loyaltyPrograms: [],\n  dietaryRestrictions: [],\n  travelClass: 'economy',\n  budgetLevel: 'moderate'\n};\n\n// Get conversation history\nconst conversationHistory = $('Fetch Recent Conversation Context').all().map(i => i.json)\n  .filter(c => c.userId === senderId)\n  .sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp))\n  .slice(0, 5);\n\n// Fill missing information from user profile\nif (!travelIntent.destinations.from?.city && userProfile.defaultDepartureCity !== 'Not Set') {\n  travelIntent.destinations.from = {\n    city: userProfile.defaultDepartureCity,\n    country: userProfile.defaultDepartureCountry || 'USA',\n    iataCode: userProfile.defaultDepartureIATA || 'NYC',\n    confidence: 80,\n    source: 'user_profile_default'\n  };\n  travelIntent.missingInformation = travelIntent.missingInformation.filter(\n    m => !m.includes('departure city')\n  );\n}\n\n// Apply budget preferences if not specified\nif (!travelIntent.budget?.amount) {\n  const budgetDefaults = {\n    'budget': 1000,\n    'economy': 2000,\n    'moderate': 4000,\n    'premium': 8000,\n    'luxury': 15000\n  };\n  travelIntent.budget = {\n    amount: budgetDefaults[userProfile.budgetLevel] || 3000,\n    currency: userProfile.preferredCurrency || 'USD',\n    perPerson: true,\n    category: userProfile.budgetLevel,\n    source: 'user_profile_default'\n  };\n}\n\n// Apply travel class preference if not specified\nif (!travelIntent.preferences?.flightClass) {\n  travelIntent.preferences = travelIntent.preferences || {};\n  travelIntent.preferences.flightClass = userProfile.travelClass || 'economy';\n}\n\n// Merge dietary and accessibility requirements\nif (userProfile.dietaryRestrictions?.length > 0) {\n  travelIntent.specialRequirements = [\n    ...travelIntent.specialRequirements,\n    ...userProfile.dietaryRestrictions.map(d => `dietary: ${d}`)\n  ];\n}\n\nif (userProfile.loyaltyPrograms?.length > 0) {\n  travelIntent.preferences.loyaltyPrograms = userProfile.loyaltyPrograms;\n}\n\nconst enrichedRequest = {\n  transcriptionData,\n  travelIntent,\n  userProfile: {\n    id: senderId,\n    name: userProfile.name,\n    defaultDepartureCity: userProfile.defaultDepartureCity,\n    preferredCurrency: userProfile.preferredCurrency,\n    budgetLevel: userProfile.budgetLevel,\n    travelClass: userProfile.travelClass,\n    loyaltyPrograms: userProfile.loyaltyPrograms || [],\n    pastTripCount: userProfile.pastTripCount || 0\n  },\n  conversationContext: {\n    recentMessages: conversationHistory.length,\n    lastInteraction: conversationHistory[0]?.timestamp || null,\n    priorSearches: conversationHistory.map(c => c.searchSummary).filter(Boolean)\n  },\n  enrichedAt: new Date().toISOString(),\n  readyForSearch: !travelIntent.needsClarification\n};\n\nreturn [{ json: enrichedRequest }];"},"typeVersion":2},{"id":"df9f02d8-f657-4a52-8d76-09a77559e6bc","name":"Search Flights (Skyscanner/Kiwi.com)","type":"n8n-nodes-base.httpRequest","position":[2528,620],"parameters":{"url":"https://api.skyscanner.net/v3/flights/live/search/create","method":"POST","options":{"timeout":30000},"sendBody":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{}]},"genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"rJ0YUgA7qjQmQxfT","name":"n8n"}},"typeVersion":4.2,"continueOnFail":true},{"id":"f68704a6-e900-44be-85ba-e4c14f4d89a3","name":"Search Hotels (Booking.com API)","type":"n8n-nodes-base.httpRequest","position":[2528,812],"parameters":{"url":"https://api.booking.com/v1/hotels/search","method":"POST","options":{"timeout":30000},"sendBody":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{}]},"genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"rJ0YUgA7qjQmQxfT","name":"n8n"}},"typeVersion":4.2,"continueOnFail":true},{"id":"14e960c5-3711-42ec-980c-a2f34048de05","name":"Search Activities & Tours","type":"n8n-nodes-base.httpRequest","position":[2528,1004],"parameters":{"url":"https://api.viator.com/v1/search/products","method":"POST","options":{"timeout":25000},"sendBody":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{}]},"genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"rJ0YUgA7qjQmQxfT","name":"n8n"}},"typeVersion":4.2,"continueOnFail":true},{"id":"c7511e46-8edb-4cc3-9100-71145f74e24c","name":"Aggregate and Rank Results","type":"n8n-nodes-base.code","position":[2752,864],"parameters":{"jsCode":"const enrichedRequest = $('Merge Intent, Profile & Context').item.json;\nconst flightResults = $('Search Flights (Skyscanner/Kiwi.com)').item.json;\nconst hotelResults = $('Search Hotels (Booking.com API)').item.json;\nconst activityResults = $('Search Activities & Tours').item.json;\n\n// Extract and normalize flight options\nconst flights = (flightResults.itineraries || flightResults.data?.itineraries || []).map(flight => ({\n  type: 'flight',\n  airline: flight.legs?.[0]?.carriers?.marketing?.[0]?.name || 'Unknown',\n  flightNumber: flight.legs?.[0]?.segments?.[0]?.flightNumber || 'N/A',\n  departure: {\n    time: flight.legs?.[0]?.departure,\n    airport: flight.legs?.[0]?.origin?.displayCode\n  },\n  arrival: {\n    time: flight.legs?.[0]?.arrival,\n    airport: flight.legs?.[0]?.destination?.displayCode\n  },\n  duration: flight.legs?.[0]?.durationInMinutes || 0,\n  stops: flight.legs?.[0]?.stopCount || 0,\n  price: {\n    amount: flight.pricingOptions?.[0]?.price?.amount || 9999,\n    currency: flight.pricingOptions?.[0]?.price?.unit || 'USD'\n  },\n  bookingLink: flight.pricingOptions?.[0]?.items?.[0]?.deepLink || '#',\n  score: 0\n})).slice(0, 5);\n\n// Extract and normalize hotel options\nconst hotels = (hotelResults.results || hotelResults.data?.hotels || []).map(hotel => ({\n  type: 'hotel',\n  name: hotel.name || 'Unknown Hotel',\n  stars: hotel.stars || hotel.class || 3,\n  rating: hotel.reviewScore || hotel.rating || 0,\n  reviewCount: hotel.reviewCount || 0,\n  price: {\n    amount: hotel.minTotalPrice || hotel.price?.total || 999,\n    currency: hotel.currencyCode || 'USD',\n    perNight: true\n  },\n  location: hotel.address || hotel.location?.address || 'Unknown',\n  amenities: hotel.facilities || [],\n  images: hotel.photos?.slice(0, 3) || [],\n  bookingLink: hotel.url || '#',\n  score: 0\n})).slice(0, 5);\n\n// Extract and normalize activity options\nconst activities = (activityResults.products || activityResults.data?.activities || []).map(activity => ({\n  type: 'activity',\n  title: activity.title || activity.name || 'Unknown Activity',\n  rating: activity.rating || 0,\n  reviewCount: activity.reviewCount || 0,\n  duration: activity.duration || 'Variable',\n  category: activity.category || 'General',\n  price: {\n    amount: activity.price?.amount || activity.fromPrice || 50,\n    currency: activity.price?.currency || 'USD'\n  },\n  description: activity.description?.substring(0, 150) || '',\n  bookingLink: activity.productUrl || '#',\n  score: 0\n})).slice(0, 5);\n\n// Smart ranking algorithm\nfunction calculateScore(item, budget, preferences) {\n  let score = 0;\n  \n  if (item.type === 'flight') {\n    // Price factor (40%)\n    const priceFactor = 1 - (item.price.amount / budget.amount);\n    score += priceFactor * 40;\n    \n    // Duration factor (30%) - shorter is better\n    const durationFactor = item.duration > 0 ? Math.max(0, 1 - (item.duration / 1000)) : 0.5;\n    score += durationFactor * 30;\n    \n    // Stops penalty (30%)\n    score += (item.stops === 0 ? 30 : item.stops === 1 ? 15 : 5);\n  }\n  \n  if (item.type === 'hotel') {\n    // Price factor (30%)\n    const nightlyBudget = budget.amount / 7; // Assume week trip\n    const priceFactor = 1 - Math.min(1, item.price.amount / nightlyBudget);\n    score += priceFactor * 30;\n    \n    // Rating factor (40%)\n    score += (item.rating / 10) * 40;\n    \n    // Stars match (30%)\n    const starMatch = Math.abs(item.stars - (preferences.hotelStars || 3)) === 0 ? 30 : 15;\n    score += starMatch;\n  }\n  \n  if (item.type === 'activity') {\n    // Rating factor (50%)\n    score += (item.rating / 5) * 50;\n    \n    // Review count factor (20%)\n    const reviewFactor = Math.min(1, item.reviewCount / 100);\n    score += reviewFactor * 20;\n    \n    // Price factor (30%)\n    const activityBudget = budget.amount * 0.2; // 20% of budget for activities\n    const priceFactor = 1 - Math.min(1, item.price.amount / activityBudget);\n    score += priceFactor * 30;\n  }\n  \n  return Math.round(score);\n}\n\n// Calculate scores\nflights.forEach(f => f.score = calculateScore(f, enrichedRequest.travelIntent.budget, enrichedRequest.travelIntent.preferences));\nhotels.forEach(h => h.score = calculateScore(h, enrichedRequest.travelIntent.budget, enrichedRequest.travelIntent.preferences));\nactivities.forEach(a => a.score = calculateScore(a, enrichedRequest.travelIntent.budget, enrichedRequest.travelIntent.preferences));\n\n// Sort by score\nflights.sort((a, b) => b.score - a.score);\nhotels.sort((a, b) => b.score - a.score);\nactivities.sort((a, b) => b.score - a.score);\n\n// Calculate total package estimate\nconst topFlight = flights[0];\nconst topHotel = hotels[0];\nconst estimatedTotal = (topFlight?.price.amount || 0) + (topHotel?.price.amount || 0) * 7;\nconst withinBudget = estimatedTotal <= enrichedRequest.travelIntent.budget.amount;\n\nreturn [{\n  json: {\n    enrichedRequest,\n    searchResults: {\n      flights,\n      hotels,\n      activities,\n      totalResults: flights.length + hotels.length + activities.length\n    },\n    topRecommendations: {\n      flight: flights[0] || null,\n      hotel: hotels[0] || null,\n      activity: activities[0] || null,\n      estimatedTotal,\n      withinBudget,\n      budgetRemaining: enrichedRequest.travelIntent.budget.amount - estimatedTotal\n    },\n    searchedAt: new Date().toISOString()\n  }\n}];"},"typeVersion":2},{"id":"93e82586-de1a-427a-ba33-cc86f8b07f65","name":"Claude AI Response Generation","type":"@n8n/n8n-nodes-langchain.agent","position":[2976,864],"parameters":{"text":"=You are a friendly, conversational travel assistant speaking directly to a user via voice message. Generate a natural, enthusiastic response that sounds like a helpful friend sharing travel recommendations.\n\n**User's Original Request:**\n\"{{ $json.enrichedRequest.transcriptionData.transcription.text }}\"\n\n**User Profile:**\n- Name: {{ $json.enrichedRequest.userProfile.name }}\n- Budget Level: {{ $json.enrichedRequest.userProfile.budgetLevel }}\n- Past Trips: {{ $json.enrichedRequest.userProfile.pastTripCount }}\n\n**Travel Intent Understood:**\n- Going to: {{ $json.enrichedRequest.travelIntent.destinations.to[0].city }}\n- From: {{ $json.enrichedRequest.travelIntent.destinations.from.city }}\n- Dates: {{ $json.enrichedRequest.travelIntent.dates.departure.exact }} to {{ $json.enrichedRequest.travelIntent.dates.return.exact }}\n- Budget: {{ $json.enrichedRequest.travelIntent.budget.currency }} {{ $json.enrichedRequest.travelIntent.budget.amount }}\n- Passengers: {{ $json.enrichedRequest.travelIntent.passengers.adults }} adult(s)\n\n**Top Recommendations Found:**\n\nFlight: {{ $json.topRecommendations.flight?.airline || 'No flights found' }} - {{ $json.topRecommendations.flight?.price.currency }} {{ $json.topRecommendations.flight?.price.amount }} ({{ $json.topRecommendations.flight?.stops }} stops, Score: {{ $json.topRecommendations.flight?.score }}/100)\n\nHotel: {{ $json.topRecommendations.hotel?.name || 'No hotels found' }} - {{ $json.topRecommendations.hotel?.stars }} stars, {{ $json.topRecommendations.hotel?.price.currency }} {{ $json.topRecommendations.hotel?.price.amount }}/night (Rating: {{ $json.topRecommendations.hotel?.rating }}/10, Score: {{ $json.topRecommendations.hotel?.score }}/100)\n\nTop Activity: {{ $json.topRecommendations.activity?.title || 'No activities found' }} - {{ $json.topRecommendations.activity?.price.currency }} {{ $json.topRecommendations.activity?.price.amount }} ({{ $json.topRecommendations.activity?.rating }}/5 stars)\n\n**Budget Summary:**\n- Estimated Total: {{ $json.topRecommendations.estimatedTotal }}\n- Budget: {{ $json.enrichedRequest.travelIntent.budget.amount }}\n- Within Budget: {{ $json.topRecommendations.withinBudget ? 'Yes! 🎉' : 'Slightly over, but great value' }}\n- Remaining: {{ $json.topRecommendations.budgetRemaining }}\n\n**Additional Options:**\n- Found {{ $json.searchResults.flights.length }} flight options\n- Found {{ $json.searchResults.hotels.length }} hotel options\n- Found {{ $json.searchResults.activities.length }} activities\n\n**Your Task:**\nGenerate a warm, conversational voice-optimized response (300-400 words max) that:\n1. Acknowledges their request with enthusiasm\n2. Confirms the understood intent (destination, dates, budget)\n3. Presents the TOP recommendation as the clear winner with compelling reasons\n4. Mentions 1-2 alternative options briefly\n5. Highlights if it fits their budget perfectly or offers great value\n6. Adds a personal touch based on their travel history or preferences\n7. Ends with clear next steps (\"Say 'book it' to proceed\" or \"Want to see more options?\")\n8. Keep the tone casual, friendly, and optimistic\n\n**Voice-Optimized Writing Style:**\n- Use short sentences and natural speech patterns\n- Include conversational fillers (\"So\", \"Actually\", \"Plus\")\n- Avoid complex terminology or jargon\n- Use numbers sparingly, round when possible\n- Add excitement with emojis (used in text response, not spoken)\n\n**Response Format (JSON only):**\n{\n  \"textResponse\": \"Full conversational response text for messaging apps\",\n  \"voiceScript\": \"Slightly shorter version optimized for text-to-speech, no emojis\",\n  \"shortSummary\": \"One-sentence summary for notification\",\n  \"actionButtons\": [\n    { \"label\": \"Book Flight\", \"action\": \"book_flight\", \"url\": \"booking_link\" },\n    { \"label\": \"See Hotels\", \"action\": \"view_hotels\" },\n    { \"label\": \"Modify Search\", \"action\": \"modify_search\" }\n  ],\n  \"calendarEvent\": {\n    \"title\": \"Trip to Paris\",\n    \"description\": \"Brief trip summary\",\n    \"startDate\": \"2025-06-15\",\n    \"endDate\": \"2025-06-22\",\n    \"location\": \"Paris, France\",\n    \"reminders\": [\n      { \"method\": \"notification\", \"minutes\": 2880 }\n    ]\n  }\n}","options":{"systemMessage":"You are an enthusiastic travel assistant. Write conversationally as if speaking to a friend via voice message. Keep it warm, concise, and action-oriented. Respond with valid JSON only."},"promptType":"define"},"typeVersion":1.6},{"id":"e91aece6-60db-44ea-ba74-c867ee7cf959","name":"Parse Response & Create Calendar Event","type":"n8n-nodes-base.code","position":[3328,864],"parameters":{"mode":"runOnceForEachItem","jsCode":"const responseRaw = $input.item.json;\nlet responseText = responseRaw.response || responseRaw.output || responseRaw.text || '';\nif (responseRaw.content && Array.isArray(responseRaw.content)) {\n  responseText = responseRaw.content[0]?.text || '';\n}\n\nconst cleanResponse = responseText.replace(/```json\\s*/g, '').replace(/```\\s*/g, '').trim();\nconst aiResponse = JSON.parse(cleanResponse);\n\nconst aggregateData = $('Aggregate and Rank Results').item.json;\n\n// Build calendar event object for Google Calendar API\nconst calendarEvent = {\n  summary: aiResponse.calendarEvent?.title || `Trip to ${aggregateData.enrichedRequest.travelIntent.destinations.to[0].city}`,\n  description: aiResponse.calendarEvent?.description || aiResponse.shortSummary,\n  location: aiResponse.calendarEvent?.location || aggregateData.enrichedRequest.travelIntent.destinations.to[0].city,\n  start: {\n    date: aggregateData.enrichedRequest.travelIntent.dates.departure.exact,\n    timeZone: 'America/New_York'\n  },\n  end: {\n    date: aggregateData.enrichedRequest.travelIntent.dates.return.exact,\n    timeZone: 'America/New_York'\n  },\n  reminders: {\n    useDefault: false,\n    overrides: [\n      { method: 'popup', minutes: 2880 }, // 2 days before\n      { method: 'email', minutes: 10080 } // 1 week before\n    ]\n  },\n  colorId: '9', // Blue color for travel events\n  extendedProperties: {\n    private: {\n      tripType: aggregateData.enrichedRequest.travelIntent.primaryIntent,\n      budget: aggregateData.enrichedRequest.travelIntent.budget.amount.toString(),\n      flightPrice: aggregateData.topRecommendations.flight?.price.amount.toString() || '0',\n      hotelPrice: aggregateData.topRecommendations.hotel?.price.amount.toString() || '0'\n    }\n  }\n};\n\nreturn {\n  json: {\n    aggregateData,\n    aiResponse,\n    calendarEvent,\n    delivery: {\n      platform: aggregateData.enrichedRequest.transcriptionData.normalizedMessage.platform,\n      recipientId: aggregateData.enrichedRequest.transcriptionData.normalizedMessage.senderId,\n      messageId: aggregateData.enrichedRequest.transcriptionData.normalizedMessage.messageId\n    },\n    generatedAt: new Date().toISOString()\n  }\n};"},"typeVersion":2},{"id":"0a167727-9986-4cc5-b89f-0134e850dc40","name":"Add Event to Google Calendar","type":"n8n-nodes-base.googleCalendar","position":[3600,624],"parameters":{"end":"={{ $json.calendarEvent.end.date }}","start":"={{ $json.calendarEvent.start.date }}","calendar":{"__rl":true,"mode":"id","value":"=b343rsafaehyu65"},"additionalFields":{}},"credentials":{"googleCalendarOAuth2Api":{"id":"H1gVnUVKrVsDfU5z","name":"Google Calendar account 2"}},"typeVersion":1.2,"continueOnFail":true},{"id":"acff6677-6df4-4396-957a-c41cc00600e0","name":"Send WhatsApp Response","type":"n8n-nodes-base.httpRequest","position":[3776,620],"parameters":{"url":"https://graph.facebook.com/v18.0/YOUR_PHONE_NUMBER_ID/messages","method":"POST","options":{},"sendBody":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{}]},"genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"rJ0YUgA7qjQmQxfT","name":"n8n"}},"typeVersion":4.2,"continueOnFail":true},{"id":"49bcfe34-f337-460c-96d5-7ef035fe682f","name":"Send Telegram Response","type":"n8n-nodes-base.telegram","position":[3776,812],"webhookId":"d57e4944-7617-41c2-bcf7-936160a68b67","parameters":{"text":"={{ $json.aiResponse.textResponse }}","chatId":"={{ $json.delivery.recipientId }}","additionalFields":{"parse_mode":"Markdown","disable_web_page_preview":false}},"credentials":{"telegramApi":{"id":"3ubbGgZx2YzylQZu","name":"Telegram account - test"}},"typeVersion":1.2,"continueOnFail":true},{"id":"cea47ec8-b86f-4e27-9bfe-20548bee3c7b","name":"Send Interactive Action Buttons","type":"n8n-nodes-base.httpRequest","position":[3776,1004],"parameters":{"url":"=https://graph.facebook.com/v18.0/YOUR_PHONE_NUMBER_ID/messages","method":"POST","options":{},"sendBody":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{}]},"genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"rJ0YUgA7qjQmQxfT","name":"n8n"}},"typeVersion":4.2,"continueOnFail":true},{"id":"7ce5edfd-16ca-4dc1-a6b5-864fb2f845fb","name":"Log Conversation to History","type":"n8n-nodes-base.googleSheets","position":[4000,864],"parameters":{"columns":{"value":{"budget":"={{ $json.aggregateData.enrichedRequest.travelIntent.budget.amount }}","intent":"={{ $json.aggregateData.enrichedRequest.travelIntent.primaryIntent }}","userId":"={{ $json.delivery.recipientId }}","platform":"={{ $json.delivery.platform }}","timestamp":"={{ $json.generatedAt }}","destination":"={{ $json.aggregateData.enrichedRequest.travelIntent.destinations.to[0].city }}","userMessage":"={{ $json.aggregateData.enrichedRequest.transcriptionData.transcription.text }}","calendarAdded":"=true","searchSummary":"={{ $json.aiResponse.shortSummary }}"},"mappingMode":"defineBelow"},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":"conversation_history"},"documentId":{"__rl":true,"mode":"list","value":"YOUR_GOOGLE_SHEET_ID"}},"credentials":{"googleSheetsOAuth2Api":{"id":"sldw2qK7iVusK0rY","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"f91db0a8-fb0e-469e-bd77-865e4b99ce0e","name":"Webhook Response - Success","type":"n8n-nodes-base.respondToWebhook","position":[4224,864],"parameters":{"options":{"responseHeaders":{"entries":[{"name":"Content-Type","value":"application/json"}]}},"respondWith":"json","responseBody":"={\n  \"status\": \"success\",\n  \"messageId\": \"{{ $json.delivery.messageId }}\",\n  \"recipientId\": \"{{ $json.delivery.recipientId }}\",\n  \"platform\": \"{{ $json.delivery.platform }}\",\n  \"calendarEventCreated\": true,\n  \"destination\": \"{{ $json.aggregateData.enrichedRequest.travelIntent.destinations.to[0].city }}\",\n  \"timestamp\": \"{{ $json.generatedAt }}\"\n}"},"typeVersion":1},{"id":"e2de5dfb-5093-46cc-ab93-e82bf763ac60","name":"Claude Sonnet 4 Model1","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[1800,592],"parameters":{"model":"=claude-sonnet-4-20250514","options":{"temperature":0.7}},"credentials":{"anthropicApi":{"id":"fK55jZdb6CaYNukq","name":"Anthropic account - test"}},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"6c72cae6-9f17-4122-bf86-91104f5ea6e7","connections":{"Download Audio File":{"main":[[{"node":"Transcribe Audio with OpenAI Whisper","type":"main","index":0},{"node":"Claude AI Intent Classification & Entity Extraction","type":"main","index":0},{"node":"Fetch User Profile & Preferences","type":"main","index":0},{"node":"Fetch Recent Conversation Context","type":"main","index":0}]]},"Claude Sonnet 4 Model":{"ai_languageModel":[[{"node":"Claude AI Response Generation","type":"ai_languageModel","index":0}]]},"Claude Sonnet 4 Model1":{"ai_languageModel":[[{"node":"Claude AI Intent Classification & Entity Extraction","type":"ai_languageModel","index":0}]]},"Send Telegram Response":{"main":[[{"node":"Log Conversation to History","type":"main","index":0}]]},"Send WhatsApp Response":{"main":[[{"node":"Log Conversation to History","type":"main","index":0}]]},"Normalize Message Input":{"main":[[{"node":"Download Audio File","type":"main","index":0}]]},"Search Activities & Tours":{"main":[[{"node":"Aggregate and Rank Results","type":"main","index":0}]]},"Aggregate and Rank Results":{"main":[[{"node":"Claude AI Response Generation","type":"main","index":0}]]},"Log Conversation to History":{"main":[[{"node":"Webhook Response - Success","type":"main","index":0}]]},"Telegram Voice Note Webhook":{"main":[[{"node":"Normalize Message Input","type":"main","index":0}]]},"Add Event to Google Calendar":{"main":[[{"node":"Send WhatsApp Response","type":"main","index":0}]]},"Claude AI Response Generation":{"main":[[{"node":"Parse Response & Create Calendar Event","type":"main","index":0}]]},"WhatsApp Voice Message Webhook":{"main":[[{"node":"Normalize Message Input","type":"main","index":0}]]},"Merge Intent, Profile & Context":{"main":[[{"node":"Search Flights (Skyscanner/Kiwi.com)","type":"main","index":0},{"node":"Search Hotels (Booking.com API)","type":"main","index":0},{"node":"Search Activities & Tours","type":"main","index":0}]]},"Search Hotels (Booking.com API)":{"main":[[{"node":"Aggregate and Rank Results","type":"main","index":0}]]},"Send Interactive Action Buttons":{"main":[[{"node":"Log Conversation to History","type":"main","index":0}]]},"Fetch User Profile & Preferences":{"main":[[{"node":"Extract and Validate Transcription","type":"main","index":0}]]},"Fetch Recent Conversation Context":{"main":[[{"node":"Extract and Validate Transcription","type":"main","index":0}]]},"Extract and Validate Transcription":{"main":[[{"node":"Merge Intent, Profile & Context","type":"main","index":0}]]},"Search Flights (Skyscanner/Kiwi.com)":{"main":[[{"node":"Aggregate and Rank Results","type":"main","index":0}]]},"Transcribe Audio with OpenAI Whisper":{"main":[[{"node":"Extract and Validate Transcription","type":"main","index":0}]]},"Parse Response & Create Calendar Event":{"main":[[{"node":"Add Event to Google Calendar","type":"main","index":0},{"node":"Send Telegram Response","type":"main","index":0},{"node":"Send Interactive Action Buttons","type":"main","index":0}]]},"Claude AI Intent Classification & Entity Extraction":{"main":[[{"node":"Extract and Validate Transcription","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":29,"nodeTypes":{"n8n-nodes-base.code":{"count":5},"n8n-nodes-base.webhook":{"count":2},"n8n-nodes-base.telegram":{"count":1},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.httpRequest":{"count":7},"n8n-nodes-base.googleSheets":{"count":3},"n8n-nodes-base.googleCalendar":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":2},"n8n-nodes-base.respondToWebhook":{"count":1},"@n8n/n8n-nodes-langchain.lmChatAnthropic":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"Oneclick AI Squad","username":"oneclick-ai","bio":"The AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations  from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.","verified":true,"links":["https://www.oneclickitsolution.com/"],"avatar":"https://gravatar.com/avatar/848fca91367142f65f9e5c55d64e5c9952b160d7b060d103b52aa343c6bc7b3d?r=pg&d=retro&size=200"},"nodes":[{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":49,"icon":"file:telegram.svg","name":"n8n-nodes-base.telegram","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/creating-telegram-bots-with-n8n-a-no-code-platform/","icon":"💬","label":"Creating Telegram Bots with n8n, a No-Code Platform"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/telegram/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Telegram"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjYgNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzM3YWVlMiIgZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiLz48cGF0aCBmaWxsPSIjYzhkYWVhIiBkPSJtMjEuNjYxIDM0LjMzOCAzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIvPjxwYXRoIGZpbGw9IiNhOWM2ZDgiIGQ9Im0yNi42OTUgMzcuMDM0LS43MjkgNy43NDZzLS4zMDUgMi4zNzMgMi4wNjggMGw0LjY0NC00LjIwMyIvPjxwYXRoIGQ9Im0yMS43MyAzNC43MTItNy44MDktMi41NDVzLS45MzItLjM3OC0uNjMzLTEuMjM3Yy4wNjItLjE3Ny4xODYtLjMyOC41NTktLjU4OCAxLjczMS0xLjIwNiAzMi4wMjgtMTIuMDk2IDMyLjAyOC0xMi4wOTZzLjg1Ni0uMjg4IDEuMzYxLS4wOTdjLjIzMS4wODguMzc4LjE4Ny41MDMuNTQ4LjA0NS4xMzIuMDcxLjQxMS4wNjguNjg5LS4wMDMuMjAxLS4wMjcuMzg2LS4wNDUuNjc4LS4xODQgMi45NzgtNS43MDYgMjUuMTk4LTUuNzA2IDI1LjE5OHMtLjMzIDEuMy0xLjUxNCAxLjM0NWMtLjQzMi4wMTYtLjk1Ni0uMDcxLTEuNTgyLS42MS0yLjMyMy0xLjk5OC0xMC4zNTItNy4zOTQtMTIuMTI2LTguNThhLjM0LjM0IDAgMCAxLS4xNDYtLjIzOWMtLjAyNS0uMTI1LjEwOC0uMjguMTA4LS4yOHMxMy45OC0xMi40MjcgMTQuMzUyLTEzLjczMWMuMDI5LS4xMDEtLjA3OS0uMTUxLS4yMjYtLjEwNy0uOTI5LjM0Mi0xNy4wMjUgMTAuNTA2LTE4LjgwMSAxMS42MjktLjEwNC4wNjYtLjM5NS4wMjMtLjM5NS4wMjMiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Telegram","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":317,"icon":"file:googleCalendar.svg","name":"n8n-nodes-base.googleCalendar","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-host-virtual-coffee-breaks-with-n8n/","icon":"☕️","label":"How to host virtual coffee breaks with n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automation for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/tracking-time-spent-in-meetings-with-google-calendar-twilio-and-n8n/","icon":"🗓","label":"Tracking Time Spent in Meetings With Google Calendar, Twilio, and n8n"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlecalendar/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Google Calendar"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgODEgODIiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZD0iTTYxLjA1MiAxOC45NDdIMTguOTQ3djQyLjEwNWg0Mi4xMDV6Ii8+PHBhdGggZmlsbD0iI2VhNDMzNSIgZD0iTTYxLjA1MyA4MCA4MCA2MS4wNTNINjEuMDUzeiIvPjxwYXRoIGZpbGw9IiNmYmJjMDQiIGQ9Ik04MCAxOC45NDdINjEuMDUzdjQyLjEwNUg4MHoiLz48cGF0aCBmaWxsPSIjMzRhODUzIiBkPSJNNjEuMDUyIDYxLjA1M0gxOC45NDdWODBoNDIuMTA1eiIvPjxwYXRoIGZpbGw9IiMxODgwMzgiIGQ9Ik0wIDYxLjA1M3YxMi42MzJBNi4zMTQgNi4zMTQgMCAwIDAgNi4zMTYgODBoMTIuNjMyVjYxLjA1M3oiLz48cGF0aCBmaWxsPSIjMTk2N2QyIiBkPSJNODAgMTguOTQ3VjYuMzE2QTYuMzE0IDYuMzE0IDAgMCAwIDczLjY4NSAwSDYxLjA1M3YxOC45NDd6Ii8+PHBhdGggZmlsbD0iIzQyODVmNCIgZD0iTTYxLjA1MyAwSDYuMzE2QTYuMzE0IDYuMzE0IDAgMCAwIDAgNi4zMTZ2NTQuNzM3aDE4Ljk0N1YxOC45NDdoNDIuMTA1VjB6TTI3LjU4NCA1MS42MTFjLTEuNTc0LTEuMDYzLTIuNjYzLTIuNjE2LTMuMjU4LTQuNjY4bDMuNjUzLTEuNTA1cS40OTggMS44OTQgMS43MzcgMi45MzdjMS4yMzkgMS4wNDMgMS44MjEgMS4wMzcgMi45ODkgMS4wMzdxMS43OTIgMCAzLjA3OS0xLjA4OWMxLjI4Ny0xLjA4OSAxLjI5LTEuNjUzIDEuMjktMi43NzRhMy40NCAzLjQ0IDAgMCAwLTEuMzU4LTIuODExYy0uOTA1LS43MjctMi4wNDItMS4wODktMy40LTEuMDg5aC0yLjExMXYtMy42MTZIMzIuMXExLjc1MiAwIDIuOTUzLS45NDdjMS4yMDEtLjk0NyAxLjItMS40OTUgMS4yLTIuNTk1cTAtMS40NjctMS4wNzQtMi4zNDJjLTEuMDc0LS44NzUtMS42MjEtLjg3OS0yLjcyMS0uODc5cS0xLjYxLS4wMDItMi41NTguODU4Yy0uOTQ4Ljg2LTEuMTA2IDEuMzAxLTEuMzc5IDIuMTExbC0zLjYxNi0xLjUwNWMuNDc5LTEuMzU4IDEuMzU4LTIuNTU4IDIuNjQ3LTMuNTk1czIuOTM3LTEuNTU4IDQuOTM3LTEuNTU4cTIuMjItLjAwMiAzLjk4OS44NThjMS43NjkuODYgMi4xMDUgMS4zNjggMi43NzQgMi4zNzlzMSAyLjE1MyAxIDMuNDE2cTAgMS45MzItLjkzMiAzLjI3NGMtLjkzMiAxLjM0Mi0xLjM4NCAxLjU3OS0yLjI4OSAyLjA1OHYuMjE2YTYuOTUgNi45NSAwIDAgMSAyLjkzNyAyLjI4OXExLjE0NiAxLjUzOCAxLjE0NyAzLjY4NGMuMDAxIDIuMTQ2LS4zNjMgMi43MTEtMS4wODkgMy44MzJzLTEuNzMyIDIuMDA1LTMuMDA1IDIuNjQ3Yy0xLjI3OS42NDItMi43MTYuOTY4LTQuMzExLjk2OC0xLjg0Ny4wMDUtMy41NTMtLjUyNi01LjEyNi0xLjU4OXptMjIuNDM3LTE4LjEyNi00LjAxIDIuOS0yLjAwNS0zLjA0MiA3LjE5NS01LjE4OWgyLjc1OHYyNC40NzloLTMuOTM3VjMzLjQ4NHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Google Calendar","typeVersion":1,"nodeCategories":[{"id":4,"name":"Productivity"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1145,"icon":"file:anthropic.svg","name":"@n8n/n8n-nodes-langchain.lmChatAnthropic","codex":{"data":{"alias":["claude","sonnet","opus"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatanthropic/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Anthropic Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzdEN0Q4NyIgZD0iTTMyLjczIDBoLTYuOTQ1TDM4LjQ1IDMyaDYuOTQ1ek0xMi42NjUgMCAwIDMyaDcuMDgybDIuNTktNi43MmgxMy4yNWwyLjU5IDYuNzJoNy4wODJMMTkuOTI5IDB6bS0uNzAyIDE5LjMzNyA0LjMzNC0xMS4yNDYgNC4zMzQgMTEuMjQ2eiIvPjwvc3ZnPg=="},"displayName":"Anthropic Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":40,"name":"Support Chatbot"},{"id":47,"name":"AI Chatbot"}],"image":[]}}