{ "name": "AI-агент в Telegram (Prog Academy)", "nodes": [ { "parameters": { "updates": [ "message" ], "additionalFields": {} }, "id": "a1b2c3d4-0000-4000-8000-000000000002", "name": "Telegram Trigger", "type": "n8n-nodes-base.telegramTrigger", "typeVersion": 1.2, "position": [ 0, 0 ], "webhookId": "a1b2c3d4-0000-4000-8000-000000000001" }, { "parameters": { "promptType": "define", "text": "={{ $json.message.text }}", "options": { "systemMessage": "=Ты — администратор [НАЗВАНИЕ] в Telegram. Отвечаешь клиентам на их языке (по умолчанию на русском): коротко, тепло, на «вы», обычным текстом без Markdown.\n\nО бизнесе:\n- Услуги, цены и длительность: [УСЛУГИ И ЦЕНЫ]\n- График работы: [ГРАФИК]\n- Адрес: [АДРЕС]\n- Связь с человеком: [КОНТАКТ]\n\nПравила:\n1. Отвечай только на основе данных выше. Если ответа там нет, не выдумывай: скажи, что это лучше уточнить у человека, и дай контакт.\n2. Чтобы записать клиента, сначала узнай услугу и желаемый день.\n3. Проверь свободное время инструментом Check free time в рамках графика и предложи ровно два свободных варианта. Вариант подходит, только если весь визит от начала до конца (с длительностью услуги) не пересекается ни с одним занятым слотом и заканчивается до конца рабочего дня.\n4. Перед записью переспроси услугу, дату, время и имя. Записывай только после чёткого «да».\n5. Записывай инструментом Book appointment. Название события: «Услуга — имя клиента». Длительность бери из списка услуг, а если её там нет — 60 минут.\n6. Отмену и перенос не делай сам: извинись и дай контакт человека.\n7. На грубость отвечай спокойно и вежливо. Если вопрос не о бизнесе, мягко верни разговор к услугам.\n8. Никогда не называй цены, скидки или свободное время, которых нет в данных или в календаре.\n\nСейчас: {{ $now.setLocale('ru').toFormat('cccc, dd.MM.yyyy, HH:mm') }}, часовой пояс {{ $now.zoneName }} (ISO: {{ $now.toISO() }}).\nИмя клиента в Telegram: {{ $('Telegram Trigger').item.json.message.from.first_name }}." } }, "id": "a1b2c3d4-0000-4000-8000-000000000003", "name": "AI Agent", "type": "@n8n/n8n-nodes-langchain.agent", "typeVersion": 3.1, "position": [ 260, 0 ] }, { "parameters": { "modelName": "models/gemini-3.8-flash", "options": { "temperature": 0.3 } }, "id": "a1b2c3d4-0000-4000-8000-000000000004", "name": "Google Gemini Chat Model", "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini", "typeVersion": 1, "position": [ 120, 260 ] }, { "parameters": { "sessionIdType": "customKey", "sessionKey": "={{ $('Telegram Trigger').item.json.message.chat.id }}", "contextWindowLength": 10 }, "id": "a1b2c3d4-0000-4000-8000-000000000005", "name": "Simple Memory", "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", "typeVersion": 1.3, "position": [ 300, 260 ] }, { "parameters": { "descriptionType": "manual", "toolDescription": "Возвращает занятые слоты в календаре за период. Свободное время — всё, что в рамках графика работы и не занято.", "resource": "calendar", "calendar": { "__rl": true, "mode": "list", "value": "" }, "timeMin": "={{ $fromAI('timeMin', 'Начало периода, ISO 8601 с часовым поясом', 'string') }}", "timeMax": "={{ $fromAI('timeMax', 'Конец периода, ISO 8601 с часовым поясом', 'string') }}", "options": { "outputFormat": "bookedSlots" } }, "id": "a1b2c3d4-0000-4000-8000-000000000006", "name": "Check free time", "type": "n8n-nodes-base.googleCalendarTool", "typeVersion": 1.3, "position": [ 480, 260 ] }, { "parameters": { "descriptionType": "manual", "toolDescription": "Создаёт запись клиента в календаре. Вызывай только после того, как клиент чётко подтвердил услугу, дату, время и имя.", "calendar": { "__rl": true, "mode": "list", "value": "" }, "start": "={{ $fromAI('start', 'Начало записи, ISO 8601 с часовым поясом', 'string') }}", "end": "={{ $fromAI('end', 'Конец записи, ISO 8601 с часовым поясом', 'string') }}", "additionalFields": { "summary": "={{ $fromAI('summary', 'Название события: Услуга — имя клиента', 'string') }}" } }, "id": "a1b2c3d4-0000-4000-8000-000000000007", "name": "Book appointment", "type": "n8n-nodes-base.googleCalendarTool", "typeVersion": 1.3, "position": [ 660, 260 ] }, { "parameters": { "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}", "text": "={{ $json.output }}", "additionalFields": { "appendAttribution": false } }, "id": "a1b2c3d4-0000-4000-8000-000000000008", "name": "Send reply", "type": "n8n-nodes-base.telegram", "typeVersion": 1.2, "position": [ 620, 0 ] } ], "connections": { "Telegram Trigger": { "main": [ [ { "node": "AI Agent", "type": "main", "index": 0 } ] ] }, "AI Agent": { "main": [ [ { "node": "Send reply", "type": "main", "index": 0 } ] ] }, "Google Gemini Chat Model": { "ai_languageModel": [ [ { "node": "AI Agent", "type": "ai_languageModel", "index": 0 } ] ] }, "Simple Memory": { "ai_memory": [ [ { "node": "AI Agent", "type": "ai_memory", "index": 0 } ] ] }, "Check free time": { "ai_tool": [ [ { "node": "AI Agent", "type": "ai_tool", "index": 0 } ] ] }, "Book appointment": { "ai_tool": [ [ { "node": "AI Agent", "type": "ai_tool", "index": 0 } ] ] } }, "settings": { "executionOrder": "v1", "timezone": "Europe/Kyiv" }, "pinData": {}, "meta": { "templateCredsSetupCompleted": false } }