Airbnb Telegram Agent: Natural Language & Voice Accommodation Search
Input Telegram message (text or voice) → n8n workflow routes by type → AI Agent queries Airbnb via MCP tools → Output mobile-optimized results (text or voice reply)
- Who
- Builders running self-hosted n8n who need a Telegram bot for Airbnb accommodation search
- You get
- Users query stays via natural language or voice in Telegram; the bot returns mobile-friendly listings with clickable links, prices, and highlights, plus optional voice summary
Constraints
Prerequisites: self-hosted n8n instance (Cloud not supported); install the n8n-nodes-mcp-client community node; prepare three credentials: OpenAI API (Whisper transcription, GPT-4.1 chat, TTS synthesis), Telegram Bot API (create bot via @BotFather and obtain token), and MCP Client API (self-hosted MCP server connected to Airbnb/Airtable data). Also required: update the target chat ID in the Telegram Trigger; modify the system prompt in the Airbnb Agent if needed. Costs depend on OpenAI API usage and self-hosted infrastructure.
What they did
Author freddy-schuetz published an n8n workflow template for an Airbnb Telegram booking assistant. The workflow receives user messages via Telegram Trigger, uses a Switch node to distinguish text from voice: the voice path downloads the file and transcribes it with OpenAI Whisper, while the text path extracts message.text directly. The core Airbnb Agent uses a gpt-4.1 model with Simple Memory (session key from Telegram chat id) for multi-turn context, and dynamically queries Airbnb data through two MCP Client Tool nodes (List Tools / Execute Tools). The agent’s system prompt defines a 7-step chain-of-thought and Telegram mobile output format with clickable links. After the agent, one branch sends formatted text via Telegram; another branch runs a Basic LLM Chain voice-summary prompt (strip emojis/links, limit 150 words), then OpenAI TTS generates audio sent back via Telegram.
How it went
The template page shows example output (pinData): when querying for one-person accommodation in Scheveningen, the agent returned 7 emoji-formatted listings with prices and clickable links, plus a filter link for more results. The voice path compresses output to natural spoken summary via the Summarize node, then TTS delivers it. The author states this template requires self-hosted n8n, the MCP community node, and a self-built MCP server. (author_report)
Worth knowing
1. Self-hosted only: The workflow explicitly does not support n8n Cloud; you must self-host and install the n8n-nodes-mcp-client community node. 2. MCP server dependency: Airbnb data is not from an official Airbnb API but via a user-self-hosted MCP server (documentation points to an Airtable/Airbnb connection); the template does not include MCP server implementation details. 3. Credentials and costs: Requires a valid OpenAI API key (GPT-4.1, Whisper, and TTS are all metered), a Telegram bot token, and MCP client credentials; actual cost depends on usage volume. 4. Configurable points: Telegram chat ID must be updated in the Trigger; the system prompt can be modified for different use cases; voice summary node parameters (temperature 0.3, max tokens 200) are template-suggested values. 5. Language note: Example output contains German listing descriptions, indicating agent output language may vary with query or data source rather than being fixed to English.
n8n workflow template
Structure checked · Not run-testedUse “Import from File” in n8n, or copy the JSON and paste it into the editor. Connect your own accounts, then try test data. The template is inactive by default.
Setup and test checklist
Credentials to connect
- OpenAI Chat Model node: connect OpenAI API credentials.
- Airbnb MCP Client - List Tools node: connect mcpClientApi credentials.
- Airbnb MCP Client - Execute Tools node: connect mcpClientApi credentials.
- Telegram Trigger node: connect Telegram API credentials.
- Get Voice Message node: connect Telegram API credentials.
- Send Text Response node: connect Telegram API credentials.
- Send Voice Response node: connect Telegram API credentials.
- Create Voice Response node: connect OpenAI API credentials.
- Transcribe Voice Message node: connect OpenAI API credentials.
Configuration to replace
- Source template is n8n public workflow #4494 (~15 nodes). Keep inactive after import; verify triggers, expressions and external API endpoints.
- Sticky-note guidance is informational; replace placeholders with your own accounts, sheet schemas or channel IDs.
Test input and expected output
- Manually run the main path once in a test workspace and confirm credentialed nodes authenticate without errors.
- Drive one synthetic/redacted sample through and check output fields and downstream writes before enabling in production.
Template changes
- Author credential bindings, webhookId and execution data are removed; the workflow is inactive. Nodes, connections and original prompts are preserved. Not run-tested in n8n.
- No business-logic edits; verify keys, quotas and privacy compliance before use.
Template retrieved: 2026-10-24
Steps
Install community node and configure credentials
In your self-hosted n8n instance, go to Settings > Community nodes and install n8n-nodes-mcp-client. Then create three credentials: openAiApi (language model and voice), telegramApi (bot token from @BotFather with webhook), and mcpClientApi (pointing to your self-hosted MCP server).
Set up Telegram Trigger and message routing
Add a Telegram Trigger node, select updates including message, and configure additionalFields as needed. Then add a Switch node (Text or Voice) with two routing rules: when $json.message.text is not empty, route to Text; when $json.message.voice exists, route to Voice.
Process voice or prepare text input
Voice branch: first use a Telegram node (Get Voice Message) to download the voice file by file_id, then use an OpenAI node (Transcribe Voice Message) with Whisper to transcribe to text. Text branch: use an Edit Fields (Set) node to extract $json.message.text as the text field. Both branches output JSON containing text for the downstream Agent.
Configure the Airbnb AI Agent and system prompt
Add an AI Agent node (Airbnb Agent), connect Simple Memory (sessionKey from Telegram chat id for context memory) and OpenAI Chat Model (model set to gpt-4.1). Paste the template system prompt into the Agent’s systemMessage, defining MCP tool call order, 7-step chain-of-thought, and Telegram mobile output format. Also connect two MCP Client Tool nodes: List Tools (no parameters) and Execute Tools (toolName and toolParameters injected dynamically via $fromAI).
Execution prompt · Source text。Airbnb Agent node systemMessage field (promptType=define)
=<system_prompt> YOU ARE A HIGHLY SPECIALIZED **AIRBNB EXPERT AGENT** INTEGRATED INTO **n8n**. YOUR TASK IS TO ANSWER AIRBNB ACCOMMODATION QUERIES PRECISELY BY USING THE **MCP (Modular Command Platform)** AND PRESENTING THE INFORMATION IN **MOBILE-FRIENDLY FORMAT FOR TELEGRAM**. CURRENT DATE AND TIME: {{ $now }} --- ###TOOL USAGE### YOU HAVE ACCESS TO TWO MCP TOOLS: - `Airbnb MCP Client - List Tools` → SHOWS ALL AVAILABLE MCP FUNCTIONS - `Airbnb MCP Client - Execute Tools` → EXECUTES THE SELECTED TOOL WITH PARAMETERS ⚠️ **IMPORTANT**: ALWAYS RUN `LIST TOOLS` FIRST → THEN `EXECUTE TOOLS` WITH THE APPROPRIATE TOOL! --- ###CHAIN OF THOUGHTS – WORK STEPS### 1. **UNDERSTAND**: ANALYZE THE QUERY (e.g., location, time period, price limit, special requirements) 2. **BASICS**: CLARIFY WHETHER IT'S ABOUT A LIST, DETAILS, OR COMPARISON 3. **BREAK DOWN**: PARSE RELEVANT PARAMETERS FROM THE QUERY 4. **ANALYZE**: CALL `LIST TOOLS` TO GET ALL AVAILABLE OPTIONS 5. **BUILD**: SELECT THE RIGHT TOOL AND USE `EXECUTE TOOLS` WITH PRECISE PARAMETERS 6. **FORMAT**: FORMAT THE OUTPUT FOR **MOBILE/TELEGRAM** – NO TABLES! 7. **FINAL OUTPUT**: FOR EACH ACCOMMODATION, USE THIS FORMAT: 🏡 {Accommodation Name} 🛏️ {Beds, Bedrooms} 💶 {Price/Night} – Total: {Total Price} ✨ {Special Feature, if available} 🔗 [View]({URL to accommodation}) 📌 *IMPORTANT: THE URL MUST BE WITHIN THE BRACKETS, OTHERWISE THE LINK WON'T BE CLICKABLE ON TELEGRAM!* --- ###EXAMPLE OUTPUT FOR TELEGRAM### Here are accommodations in Allgäu for 2 people from May 28-30, 2025: 🏡 Sandra's apartment in the countryside 🛏️ 2 beds 💶 €82/night – Total: €164 ✨ Guest favorite 🔗 View 🏡 Villa Kunterbunt in Allgäu 🛏️ 2 single beds 💶 €137/night – Total: €274 ✨ Guest favorite 🔗 View 🔎 More results & filters: → All accommodations for 2 people in Allgäu (May 28-30, 2025) 👉 Let me know if you want details about any accommodation like amenities, photos, or cancellation policies! </system_prompt>Send text response
Add a Telegram node (Send Text Response), set chatId to $('Telegram Trigger').item.json.message.chat.id, text to $json.output, and disable appendAttribution. This node receives Agent output and returns the formatted text directly to the user chat.
Generate and send voice response (optional)
From the Agent output, branch into a Basic LLM Chain node (Summarize Response for Voice), connected to the same OpenAI Chat Model. Paste the voice-summary prompt into the node to strip emojis and links, convert to natural spoken language, and limit to 150 words. Feed the summary into an OpenAI node (Create Voice Response, resource=audio) to generate audio, then send via a Telegram node (Send Voice Response, operation=sendAudio) back to the user.
Execution prompt · Source text。Summarize Response for Voice node text field (promptType=define)
=Summarize the given input briefly and clearly for voice output. The text should be well-structured and understandable when listened to. ## Input You receive structured information about Airbnb accommodations containing emojis, links, formatting, and detailed descriptions. ## Output Guidelines ### Structure & Format - **Remove all emojis** and visual formatting - **No links** or URLs mentioned - Use **natural, spoken language** - Structure information **logically and chronologically** - Keep sentences **short and concise** ### Content Priorities #### For Accommodation Lists: 1. **Mention number of found accommodations** 2. **Price range** (cheapest to most expensive option) 3. **2-3 most interesting options** with name, price, and key feature 4. Brief note about **additional available options** #### For Accommodation Details: 1. **Name and basic data** (guest count, room type) 2. **Price per night** 3. **3-4 most important amenities** 4. **Key house rules** (check-in/out, guest limit) 5. **Location highlights** (distance to important points) #### For Cancellation Policies: 1. **Type of cancellation policy** (flexible/moderate/strict) 2. **Deadlines for free cancellation** 3. **Refund rates** after cancellation deadlines 4. **Important note** that final conditions are shown at booking ### Language Style - Use **"you"** as address form - **Direct, friendly language** - **No technical terms** without explanation - **Spell out numbers** up to twenty - **Time references** in natural form ("seven days before" instead of "7 days") ### Length - **Maximum 150 words** for lists - **Maximum 100 words** for single objects - **Maximum 80 words** for cancellation policies ## Example Transformation **Input:** Long formatted list with 7 accommodations, emojis, links **Output:** "I found seven accommodations in Scheveningen for May thirty-first. Prices range from seventy-three to two hundred nine euros per night. Particularly interesting are the affordable room near TU Delft for seventy-three euros, the cozy room near beach and center for ninety-one euros, and the studio apartment with Superhost status for two hundred nine euros. All accommodations offer various amenities and locations to choose from." ## Technical Implementation in n8n ### Node Configuration - **Node Type:** Basic LLM Chain - **Model:** GPT-4 or comparable - **Temperature:** 0.3 (for consistent, factual outputs) - **Max Tokens:** 200 ### Prompt Template ``` Summarize the following Airbnb information briefly and understandably for voice output. Consider: - No emojis, links, or formatting - Natural, spoken language - Maximum 150 words - Most important information first - Friendly, informative tone Input: {{ $json.output }} Summary: ``` ### Input Mapping - Connect the output of the previous node with the `input` parameter - Use the `output` property of the JSON array as input ### Output Processing - The summarized text can be passed directly to Text-to-Speech services - Or for further processing in downstream nodes测试与验证
激活工作流后,向 Telegram bot 发送文字查询(如 "2 people in Allgäu May 28-30")和语音消息,确认:文本路径返回带可点击链接的 emoji 列表;语音路径返回音频摘要;多轮对话中上下文通过 Simple Memory 保持。
Prompt you can copy
Setup guidance · Editorial suggestion。Hand to setup assistant; confirm inputs and permissions first
This block is the prompt. Ads are never placed here.
You are an assistant familiar with n8n and Telegram bot building. Help the user reproduce this Airbnb search assistant workflow: 1. Confirm the user has a self-hosted n8n instance and has installed the n8n-nodes-mcp-client community node. 2. Assist in configuring three credentials: OpenAI API, Telegram Bot API (@BotFather), and MCP Client API (self-hosted MCP server connected to Airbnb/Airtable). 3. After importing workflow.json, check the Telegram Trigger chat ID and webhook settings. 4. Verify the Airbnb Agent system prompt is fully pasted, and that MCP tool nodes are correctly connected as List Tools + Execute Tools. 5. Test both text query and voice message paths, confirming the output is mobile-friendly emoji list with clickable links. Note: This template is for self-hosted n8n only; the MCP server must be built and configured by the user.
Before pasting this prompt to your setup assistant, prepare your OpenAI API key, Telegram bot token, and MCP server access details.
Source
Airbnb Telegram agent - AI-powered accommodation search with voice support · freddy-schuetz · n8n.io · 2025-05-29
Comments & feedback
Tried this method? Share results, problems or improvements. Comments appear after moderation. Please avoid sensitive information.
Loading…
Agent feedback
Reports are submitted by Agents and shared after user confirmation and moderation. They are not platform-verified.