Workflow: Limit Webhook Automation

Workflow Details

Download Workflow
{
    "id": "TtoDcjgthgA4NTkU",
    "meta": {
        "instanceId": "fb261afc5089eae952e09babdadd9983000b3d863639802f6ded8c5be2e40067",
        "templateCredsSetupCompleted": true
    },
    "name": "AI Voice Chat using Webhook, Memory Manager, OpenAI, Google Gemini & ElevenLabs",
    "tags": [
        {
            "id": "mqOrNvCDgQLzPA2x",
            "name": "Workflows",
            "createdAt": "2024-08-07T14:18:53.614Z",
            "updatedAt": "2024-08-07T14:18:53.614Z"
        }
    ],
    "nodes": [
        {
            "id": "86cbf150-df4f-42f7-b7b3-e03c32e6f23c",
            "name": "Get Chat",
            "type": "@n8n\/n8n-nodes-langchain.memoryManager",
            "position": [
                1700,
                -400
            ],
            "parameters": {
                "options": []
            },
            "typeVersion": 1,
            "alwaysOutputData": true
        },
        {
            "id": "a9153a24-e902-4f29-9b83-447317ce3119",
            "name": "Insert Chat",
            "type": "@n8n\/n8n-nodes-langchain.memoryManager",
            "position": [
                2540,
                -400
            ],
            "parameters": {
                "mode": "insert",
                "messages": {
                    "messageValues": [
                        {
                            "type": "user",
                            "message": "={{ $('OpenAI - Speech to Text').item.json[\"text\"] }}"
                        },
                        {
                            "type": "ai",
                            "message": "={{ $json.text }}"
                        }
                    ]
                }
            },
            "typeVersion": 1,
            "alwaysOutputData": true
        },
        {
            "id": "f5c272d4-248b-45a5-87b5-eb659a865d05",
            "name": "Sticky Note5",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                1664,
                -491
            ],
            "parameters": {
                "color": 6,
                "width": 486.474612481970325461588799953460693359375,
                "height": 238.491135793357898364774882793426513671875,
                "content": "## Get Context"
            },
            "typeVersion": 1
        },
        {
            "id": "32ad17ca-0045-487d-9387-71c2e73629d4",
            "name": "Sticky Note",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                2510,
                -489
            ],
            "parameters": {
                "color": 6,
                "width": 321.2536584847704261846956796944141387939453125,
                "height": 231.05945912581728407531045377254486083984375,
                "content": "## Save Context"
            },
            "typeVersion": 1
        },
        {
            "id": "17ae4f1a-6192-4c52-8157-3cb47b37e0fb",
            "name": "Aggregate",
            "type": "n8n-nodes-base.aggregate",
            "position": [
                2020,
                -400
            ],
            "parameters": {
                "options": [],
                "aggregate": "aggregateAllItemData",
                "destinationFieldName": "context"
            },
            "typeVersion": 1,
            "alwaysOutputData": true
        },
        {
            "id": "00b3081e-fbcd-489b-b45a-4e847c346594",
            "name": "Window Buffer Memory",
            "type": "@n8n\/n8n-nodes-langchain.memoryBufferWindow",
            "position": [
                2080,
                -100
            ],
            "parameters": {
                "sessionKey": "test-0dacb3b5-4bcd-47dd-8456-dcfd8c258204",
                "sessionIdType": "customKey"
            },
            "typeVersion": 1.1999999999999999555910790149937383830547332763671875
        },
        {
            "id": "55ca2790-e905-414a-a9f6-7d88a9e5807d",
            "name": "Google Gemini Chat Model",
            "type": "@n8n\/n8n-nodes-langchain.lmChatGoogleGemini",
            "position": [
                2220,
                -100
            ],
            "parameters": {
                "options": [],
                "modelName": "models\/gemini-1.5-flash"
            },
            "credentials": {
                "googlePalmApi": {
                    "id": "2bUF1ZI9hoMIM5XN",
                    "name": "Google Gemini(PaLM) Api account"
                }
            },
            "typeVersion": 1
        },
        {
            "id": "e8b3433f-b205-404c-9f05-504556d6b6dd",
            "name": "Respond to Webhook",
            "type": "n8n-nodes-base.respondToWebhook",
            "position": [
                3560,
                -400
            ],
            "parameters": {
                "options": [],
                "respondWith": "binary"
            },
            "typeVersion": 1.100000000000000088817841970012523233890533447265625
        },
        {
            "id": "de296743-5ac7-454b-bf3a-d020cc024511",
            "name": "ElevenLabs - Generate Audio",
            "type": "n8n-nodes-base.httpRequest",
            "position": [
                3240,
                -400
            ],
            "parameters": {
                "url": "=https:\/\/api.elevenlabs.io\/v1\/text-to-speech\/{{voice id}}",
                "method": "POST",
                "options": [],
                "sendBody": true,
                "sendHeaders": true,
                "authentication": "genericCredentialType",
                "bodyParameters": {
                    "parameters": [
                        {
                            "name": "text",
                            "value": "={{ $('Basic LLM Chain').item.json.text }}"
                        }
                    ]
                },
                "genericAuthType": "httpCustomAuth",
                "headerParameters": {
                    "parameters": [
                        {
                            "name": "Content-Type",
                            "value": "application\/json"
                        }
                    ]
                }
            },
            "credentials": {
                "httpCustomAuth": {
                    "id": "lnGfV4BlxSE6Xc4X",
                    "name": "Eleven Labs"
                }
            },
            "typeVersion": 4.20000000000000017763568394002504646778106689453125
        },
        {
            "id": "214e15f2-8a16-4598-b4ac-9fc2ec6545e6",
            "name": "Sticky Note2",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                3040,
                -560
            ],
            "parameters": {
                "width": 468.7325081219240701102535240352153778076171875,
                "height": 843.760235409966071529197506606578826904296875,
                "content": "* ### For the Text-to-Speech part, we'll use ElevenLabs.io, which is free and offers a variety of voices to choose from. However, you can also use the OpenAI `\"Generate audio\"` node instead.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n* ### Since there is no pre-built node for `\"ElevenLabs\"` in n8n, we'll connect to it through its API using the \"HTTP Request\" node.\n\n## Prerequisites:\n* ### `\"ElevenLabs API Key\"` (you can obtain it from their website).\n* ### `\"Voice ID\"` (you can also get it from ElevenLabs' \"Voice Library\").\n## Setup\n* ### In the URL parameter, replace \"{{voice id}}\" at the end of the URL with the Voice ID you obtained from ElevenLabs.io.\n* ### To set up your API Key, add custom authentication and include the following `JSON` with your acual ElevenLabs API Key:\n```json\n{\n  \"headers\": {\n    \"xi-api-key\": \"put-your-API-Key-here\"\n  }\n}\n```"
            },
            "typeVersion": 1
        },
        {
            "id": "94ad934c-4a13-47b1-83a5-76fab43b3a47",
            "name": "Sticky Note1",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                1663,
                -598
            ],
            "parameters": {
                "color": 6,
                "width": 487.429348759761296605574898421764373779296875,
                "height": 91.01435855269374997078557498753070831298828125,
                "content": "### The \"Get Chat,\" \"Insert Chat,\" and \"Window Buffer Memory\" nodes will help the LLM model maintain context throughout the conversation."
            },
            "typeVersion": 1
        },
        {
            "id": "0a96f48d-0d8b-4240-9eab-a681bfd4c8b5",
            "name": "Limit",
            "type": "n8n-nodes-base.limit",
            "position": [
                2900,
                -400
            ],
            "parameters": [],
            "typeVersion": 1
        },
        {
            "id": "9a5d4ddb-6403-4758-858e-9fbe10c421a9",
            "name": "Basic LLM Chain",
            "type": "@n8n\/n8n-nodes-langchain.chainLlm",
            "position": [
                2200,
                -400
            ],
            "parameters": {
                "text": "={{ $('OpenAI - Speech to Text').item.json[\"text\"] }}",
                "messages": {
                    "messageValues": [
                        {
                            "type": "AIMessagePromptTemplate",
                            "message": "=To maintain context and fully understand the user's question, always review the previous conversation between you and him before providing an answer.\nThis is the previous conversation:\n{{ $('Aggregate').item.json[\"context\"].map(m => `\nHuman: ${m.human || 'undefined'}\nAI Assistant: ${m.ai || 'undefined'}\n`).join('') }}"
                        }
                    ]
                },
                "promptType": "define"
            },
            "typeVersion": 1.399999999999999911182158029987476766109466552734375
        },
        {
            "id": "f2f99895-9678-41b8-ad28-db40e1e23dc0",
            "name": "Webhook",
            "type": "n8n-nodes-base.webhook",
            "position": [
                1320,
                -400
            ],
            "webhookId": "e9f611eb-a8dd-4520-8d24-9f36deaca528",
            "parameters": {
                "path": "voice_message",
                "options": [],
                "httpMethod": "POST",
                "responseMode": "responseNode"
            },
            "typeVersion": 2
        },
        {
            "id": "d9a5fb04-4c02-4da4-b690-7b0ecd0ae052",
            "name": "OpenAI - Speech to Text",
            "type": "@n8n\/n8n-nodes-langchain.openAi",
            "position": [
                1500,
                -400
            ],
            "parameters": {
                "options": [],
                "resource": "audio",
                "operation": "transcribe",
                "binaryPropertyName": "voice_message"
            },
            "credentials": {
                "openAiApi": {
                    "id": "2Cije3KX7OIVwn9B",
                    "name": "n8n OpenAI"
                }
            },
            "typeVersion": 1.3000000000000000444089209850062616169452667236328125
        }
    ],
    "active": true,
    "pinData": [],
    "settings": {
        "callerPolicy": "workflowsFromSameOwner",
        "executionOrder": "v1",
        "saveManualExecutions": true
    },
    "versionId": "fe5792ca-03d7-4cdd-96db-20f4cd479c7e",
    "connections": {
        "Limit": {
            "main": [
                [
                    {
                        "node": "ElevenLabs - Generate Audio",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Webhook": {
            "main": [
                [
                    {
                        "node": "OpenAI - Speech to Text",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get Chat": {
            "main": [
                [
                    {
                        "node": "Aggregate",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Aggregate": {
            "main": [
                [
                    {
                        "node": "Basic LLM Chain",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Insert Chat": {
            "main": [
                [
                    {
                        "node": "Limit",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Basic LLM Chain": {
            "main": [
                [
                    {
                        "node": "Insert Chat",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Window Buffer Memory": {
            "ai_memory": [
                [
                    {
                        "node": "Insert Chat",
                        "type": "ai_memory",
                        "index": 0
                    },
                    {
                        "node": "Get Chat",
                        "type": "ai_memory",
                        "index": 0
                    }
                ]
            ]
        },
        "OpenAI - Speech to Text": {
            "main": [
                [
                    {
                        "node": "Get Chat",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Google Gemini Chat Model": {
            "ai_languageModel": [
                [
                    {
                        "node": "Basic LLM Chain",
                        "type": "ai_languageModel",
                        "index": 0
                    }
                ]
            ]
        },
        "ElevenLabs - Generate Audio": {
            "main": [
                [
                    {
                        "node": "Respond to Webhook",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        }
    }
}
Back to Workflows

Related Workflows

HTTP Respondtowebhook Import Webhook
View
TheHive
View
Manual Stickynote Automate Triggered
View
New WooCommerce Product to Twitter and Telegram
View
Form GoogleSheets Create Triggered
View
Create, update, and get a subscriber using the e-goi node
View
Stopanderror Extractfromfile Send Webhook
View
Chat with local LLMs using n8n and Ollama
View
Automated PDF to HTML Conversion
View
Dynamically switch between LLMs Template
View