“Создание AI-продавца в n8n: подробный гайд”
Ниже приведён пример детального JSON описания n8n workflow, который реализует сценарий AI‑продавца на основе вашей транскрипции. Этот пример включает узлы для получения сообщений из Telegram (как текстовых, так и голосовых), последующей обработки (текстовая обработка и распознавание голосовых сообщений через OpenAI), вызова AI‑агента для формирования ответа, обращения к внешней базе данных (например, через API Picore Vect Store) и отправки результата обратно пользователю через Telegram. Кроме того, показан отдельный фрагмент – синхронизация с Google Drive для автоматического обновления базы данных (например, выгрузка PDF‑файлов, последующая загрузка в векторное хранилище). Вы можете импортировать этот JSON в n8n (через опцию «Import from File») и далее донастроить каждый узел в зависимости от своих API‑ключей, URL и внутренних алгоритмов.
Ниже приведён JSON код:
————————————————————
{
“name”: “AI Seller Workflow”,
“nodes”: [
{
“id”: “1”,
“name”: “Telegram Trigger”,
“type”: “n8n-nodes-base.telegramTrigger”,
“typeVersion”: 1,
“position”: [
250,
300
],
“parameters”: {
“updateMethod”: “triggerNewMessages”,
“event”: “message”
},
“credentials”: {
“telegramApi”: “Telegram Bot Credential”
}
},
{
“id”: “2”,
“name”: “Message Type Switch”,
“type”: “n8n-nodes-base.switch”,
“typeVersion”: 1,
“position”: [
500,
300
],
“parameters”: {
“propertyName”: “message”,
“rules”: [
{
“name”: “Text”,
“value”: “={{ $json[\”message\”][\”text\”] !== undefined }}”
},
{
“name”: “Voice”,
“value”: “={{ $json[\”message\”][\”voice\”] !== undefined }}”
}
]
}
},
{
“id”: “3”,
“name”: “Text Message Handler”,
“type”: “n8n-nodes-base.set”,
“typeVersion”: 1,
“position”: [
750,
200
],
“parameters”: {
“values”: {
“string”: [
{
“name”: “inputText”,
“value”: “={{ $json.message.text }}”
}
]
}
}
},
{
“id”: “4”,
“name”: “Voice Message Transcription”,
“type”: “n8n-nodes-base.openAi”,
“typeVersion”: 1,
“position”: [
750,
400
],
“parameters”: {
“operation”: “transcribe”,
“fileUrl”: “={{ $json.message.voice.file_id }}”
},
“credentials”: {
“openAiApi”: “OpenAI API Credential”
}
},
{
“id”: “5”,
“name”: “Merge Input Message”,
“type”: “n8n-nodes-base.function”,
“typeVersion”: 1,
“position”: [
950,
300
],
“parameters”: {
“functionCode”: “/* Если узел Text Message Handler сработал, то в item будет inputText, иначе – voice transcription результат */\nfor (const item of items) {\n item.json.input = item.json.inputText || item.json.transcription;\n}\nreturn items;”
}
},
{
“id”: “6”,
“name”: “AI Agent”,
“type”: “n8n-nodes-base.openAiChat”,
“typeVersion”: 1,
“position”: [
1200,
300
],
“parameters”: {
“model”: “gpt-3.5-turbo”,
“systemMessage”: “Ты наш продавец и консультант. Пользуйся данными из базы, не выдумывай ответ.”,
“prompt”: “Ответь на запрос клиента, обращаясь к базе данных для точных данных.”,
“memory”: 10,
“input”: “={{ $json.input }}”
},
“credentials”: {
“openAiApi”: “OpenAI API Credential”
}
},
{
“id”: “7”,
“name”: “Database Lookup”,
“type”: “n8n-nodes-base.httpRequest”,
“typeVersion”: 1,
“position”: [
1450,
300
],
“parameters”: {
“requestMethod”: “POST”,
“url”: “https://api.picorevectstore.com/search”,
“jsonParameters”: true,
“bodyParametersJson”: “={{ { \”query\”: $json.response } }}”
},
“credentials”: {
“httpHeaderAuth”: “PicoreVectStore Credential”
}
},
{
“id”: “8”,
“name”: “Fallback Text”,
“type”: “n8n-nodes-base.function”,
“typeVersion”: 1,
“position”: [
1700,
300
],
“parameters”: {
“functionCode”: “/* Если база данных вернула результат – отдаём его, иначе отправляем сообщение с просьбой уточнить запрос */\nconst results = items[0].json.results;\nif (results && results.length > 0) {\n items[0].json.finalAnswer = results[0].text;\n} else {\n items[0].json.finalAnswer = ‘Извините, не смог найти точный ответ – уточните, пожалуйста.’;\n}\nreturn items;”
}
},
{
“id”: “9”,
“name”: “Telegram Send Message”,
“type”: “n8n-nodes-base.telegram”,
“typeVersion”: 1,
“position”: [
1950,
300
],
“parameters”: {
“chatId”: “={{ $json.message.chat.id }}”,
“text”: “={{ $json.finalAnswer }}”
},
“credentials”: {
“telegramApi”: “Telegram Bot Credential”
}
},
{
“id”: “10”,
“name”: “Google Drive List Files”,
“type”: “n8n-nodes-base.googleDrive”,
“typeVersion”: 1,
“position”: [
250,
600
],
“parameters”: {
“resource”: “file”,
“operation”: “list”,
“filters”: {
“q”: “mimeType=’application/pdf’ and ‘your_folder_id’ in parents”
}
},
“credentials”: {
“googleApi”: “Google Cloud Service Account Credential”
}
},
{
“id”: “11”,
“name”: “Download Google Drive File”,
“type”: “n8n-nodes-base.googleDrive”,
“typeVersion”: 1,
“position”: [
500,
600
],
“parameters”: {
“resource”: “file”,
“operation”: “download”,
“fileId”: “={{ $json.id }}”
},
“credentials”: {
“googleApi”: “Google Cloud Service Account Credential”
}
},
{
“id”: “12”,
“name”: “Vector Store Insert Document”,
“type”: “n8n-nodes-base.httpRequest”,
“typeVersion”: 1,
“position”: [
750,
600
],
“parameters”: {
“requestMethod”: “POST”,
“url”: “https://api.picorevectstore.com/insert”,
“jsonParameters”: true,
“bodyParametersJson”: “={{ { \”documentContent\”: $json.data, \”metadata\”: { \”source\”: \”GoogleDrive\” } } }}”
},
“credentials”: {
“httpHeaderAuth”: “PicoreVectStore Credential”
}
}
],
“connections”: {
“Telegram Trigger”: {
“main”: [
[
{
“node”: “Message Type Switch”,
“type”: “main”,
“index”: 0
}
]
]
},
“Message Type Switch”: {
“main”: {
“Text”: [
{
“node”: “Text Message Handler”,
“type”: “main”,
“index”: 0
}
],
“Voice”: [
{
“node”: “Voice Message Transcription”,
“type”: “main”,
“index”: 0
}
]
}
},
“Text Message Handler”: {
“main”: [
{
“node”: “Merge Input Message”,
“type”: “main”,
“index”: 0
}
]
},
“Voice Message Transcription”: {
“main”: [
{
“node”: “Merge Input Message”,
“type”: “main”,
“index”: 0
}
]
},
“Merge Input Message”: {
“main”: [
{
“node”: “AI Agent”,
“type”: “main”,
“index”: 0
}
]
},
“AI Agent”: {
“main”: [
{
“node”: “Database Lookup”,
“type”: “main”,
“index”: 0
}
]
},
“Database Lookup”: {
“main”: [
{
“node”: “Fallback Text”,
“type”: “main”,
“index”: 0
}
]
},
“Fallback Text”: {
“main”: [
{
“node”: “Telegram Send Message”,
“type”: “main”,
“index”: 0
}
]
},
“Google Drive List Files”: {
“main”: [
{
“node”: “Download Google Drive File”,
“type”: “main”,
“index”: 0
}
]
},
“Download Google Drive File”: {
“main”: [
{
“node”: “Vector Store Insert Document”,
“type”: “main”,
“index”: 0
}
]
}
}
}
————————————————————
Пояснения к рабочему процессу:
1. Узел «Telegram Trigger» получает входящие сообщения из Telegram‑бота.
2. Узел «Message Type Switch» разделяет сообщения по типу – если в JSON есть поле message.text, то Branch «Text», если присутствует voice – Branch «Voice».
3. Для текстовых сообщений узел «Text Message Handler» устанавливает значение inputText.
4. Для голосовых сообщений узел «Voice Message Transcription» отправляет ID файла в OpenAI для расшифровки, результат оказывается в поле transcription.
5. Узел «Merge Input Message» объединяет данные – выбирается либо inputText, либо транскрибированный текст.
6. Узел «AI Agent» – это обращение к модели OpenAI Chat (ChatGPT), помимо простого запроса на основе входного текста, в системном сообщении прописаны инструкции («ты наш продавец…»). Здесь также настроена “память” (10 сообщений).
7. Узел «Database Lookup» посылает POST‑запрос в API векторного хранилища (PicoreVectStore) для поиска соответствующего ответа по базе данных.
8. Если база данных возвращает результат, узел «Fallback Text» выбирает первый найденный вариант – иначе отправляется сообщение с просьбой уточнения.
9. Узел «Telegram Send Message» отправляет финальный ответ клиенту через Telegram.
10. Отдельно приведён блок для синхронизации документов из Google Drive – список файлов, их скачивание и последующая загрузка в базу (векторное хранилище). Этот блок можно запускать по расписанию для постоянного обновления базы данных.
Имейте в виду, что данный JSON – пример схемы, которую нужно донастроить под конкретные данные (API‑ключи, chatId, URL, фильтры, названия папок и т.п.). Также возможно, что в вашей версии n8n типы узлов могут отличаться – например, для работы с OpenAI или Telegram используются свои уникальные настройки. Вы можете адаптировать этот пример под свои нужды.
Надеюсь, этот пример поможет вам настроить качественный workflow для вашего AI‑продавца!
Отправить комментарий