Darmowy szablon automatyzacji

Linuj chatbot z pamięcią Google Sheets i Gemini AI

72
2 mies. temu
17
bloków


Main Use Case

Ten workflow umożliwia automatyczne, wspierane przez AI odpowiedzi na wiadomości użytkowników wysyłane na LINE Official Account, jednocześnie przechowując i odwołując się do historii czatu w Google Sheets, aby zachować kontekst. Idealne rozwiązanie dla firm lub zespołów wsparcia, które chcą zapewnić inteligentne, spersonalizowane interakcje z klientami przy użyciu AI z pamięcią.

Jak to działa (krok po kroku)

  1. Połączenie z API LINE Official Account – Webhook nasłuchuje przychodzących wiadomości od użytkowników na LINE. Po odebraniu wiadomości uruchamia workflow.
  2. Przygotowanie danych – Moduł Edit Fields strukturyzuje przychodzące dane (np. wyodrębnia ID użytkownika, treść wiadomości), aby były czyste i gotowe do dalszego przetwarzania.
  3. Pobranie historii czatu – Poprzednie rozmowy użytkownika są pobierane z Google Sheets, aby AI miało kontekst i mogło kontynuować rozmowę.
  4. Przygotowanie promptu – Historia czatu jest łączona z nową wiadomością, tworząc pełny prompt dla AI. Przykładowy format: „Użytkownik wcześniej powiedział X. Teraz mówi Y. Jak powinniśmy odpowiedzieć?”
  5. AI Agent: Google Gemini – Sformatowany prompt jest przekazywany do AI (Google Gemini Chat Model), które generuje odpowiedź na podstawie wiadomości i historii. Wykorzystywane są narzędzia: Chat ModeMemory i ToolOutputParser.
  6. Podział i czyszczenie historii – Historia konwersacji jest dzielona na mniejsze fragmenty w celu oczyszczenia i przechowywania, aby Google Sheet pozostawało czytelne.
  7. Zapisanie historii czatu – Nowa wiadomość i odpowiedź AI są zapisywane w Google Sheets, aktualizując historię dla przyszłych interakcji.
  8. Wysłanie odpowiedzi na LINE – Odpowiedź wygenerowana przez AI jest wysyłana z powrotem do użytkownika za pomocą żądania POST do LINE Messaging API.

Jak skonfigurować

Wymagania wstępne:

  • Konto LINE Official Account
  • Google Sheet do przechowywania historii czatu
  • Dostęp do Google Gemini API lub innego agenta AI z pamięcią kontekstu
  • Platforma automatyzacji (np. n8n)

Krok po kroku:

  1. Utwórz Webhook na LINE – Ustaw URL webhooka na swoją usługę automatyzacji i włącz zdarzenia webhook.
  2. Przygotuj Google Sheet – Utwórz arkusz z kolumnami: User ID, Timestamp, Message, AI Reply.
  3. Skonfiguruj moduły w platformie automatyzacji:
    • Webhook – odbiera wiadomości użytkowników.
    • Edit Fields – wyodrębnia ID użytkownika i treść wiadomości.
    • Google Sheets Read – pobiera historię wiadomości.
    • Prompt Composer – formatuje prompt na podstawie historii i nowej wiadomości.
    • AI Agent – łączy się z Google Gemini, aby generować odpowiedzi.
    • Split & Clean – czyści i dzieli historię, jeśli to konieczne.
    • Google Sheets Write – zapisuje zaktualizowaną konwersację.
    • HTTP Request – wysyła odpowiedź do LINE przez Messaging API.
  4. Przetestuj workflow – Wyślij wiadomość z LINE i sprawdź cały proces: odbiór → przetwarzanie → AI → zapis → odpowiedź.
  5. Wdróż i monitoruj – Zadbaj o obsługę błędów (np. puste wiadomości, błędy API) i regularnie sprawdzaj Google Sheets pod kątem limitów przechowywania.

Korzyści

  • Zachowuje kontekst w rozmowach
  • Spersonalizowane odpowiedzi generowane przez AI
  • Łatwe śledzenie historii przez Google Sheets
  • W pełni zautomatyzowane i skalowalne rozwiązanie

Przykłady zastosowań

Ta automatyzacja może być wykorzystywana w różnych scenariuszach biznesowych, gdzie kluczowe są spersonalizowane i inteligentne interakcje z klientami. Oto kilka potencjalnych zastosowań:

  • Obsługa klienta – Automatyczne odpowiadanie na częste pytania klientów z zachowaniem kontekstu poprzednich rozmów.
  • Marketing i sprzedaż – Personalizowane rekomendacje produktów na podstawie historii zakupów i preferencji klienta.
  • Wsparcie techniczne – Rozwiązywanie problemów technicznych poprzez analizę wcześniejszych zgłoszeń i udzielanie precyzyjnych odpowiedzi.
  • Zarządzanie społecznością – Automatyczne moderowanie i odpowiadanie na wiadomości w mediach społecznościowych, np. na oficjalnym koncie marki.
  • Edukacja i szkolenia – Wirtualni asystenci, którzy pomagają uczniom lub uczestnikom szkoleń, pamiętając ich postępy i pytania.
  • Booking i rezerwacje – Automatyczne potwierdzanie rezerwacji, odpowiadanie na pytania dotyczące dostępności i personalizowane oferty.
  • HR i rekrutacja – Automatyczne odpowiadanie kandydatom na pytania dotyczące procesu rekrutacji, z możliwością odwoływania się do wcześniejszych etapów.


   Skopiuj kod szablonu   
{"id":"Qc3YJpVm2gvWnVem","meta":{"instanceId":"b795c85ef5703ecdc784a39956949c45a099b0c52b9adbeeed744965b5aed696","templateCredsSetupCompleted":true},"name":"(G) LineChatBot + Google Sheets (as a memory)","tags":[{"id":"h4Xgv16h6jb0HCgC","name":"Guitar","createdAt":"2025-04-18T08:59:48.308Z","updatedAt":"2025-04-18T08:59:48.308Z"}],"nodes":[{"id":"968cb5db-67e3-43bb-a219-5a261483d5ac","name":"Webhook","type":"n8n-nodes-base.webhook","position":[560,-500],"webhookId":"1ad58797-254a-4168-bd8c-b53f61ce3c5d","parameters":{"path":"guitarpa","options":{},"httpMethod":"POST"},"typeVersion":2},{"id":"9e607971-5dee-46a7-b60b-7fb58dc024c4","name":"AI Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[460,-220],"parameters":{"text":"={{ $json.Prompt }}","options":{"systemMessage":"=You are a helpful assistant. Your name is "ลลิตา". You will help me in everything I need. You will answer based on user language. You are an AI Agent operating in the Thailand time zone (Asia/Bangkok, UTC+7). Today is {{ $now }}."},"promptType":"define","hasOutputParser":true},"typeVersion":1.8},{"id":"ef5639d1-7e0a-4c0d-9182-6b8d90e4ee7b","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[460,-20],"parameters":{"options":{},"modelName":"models/gemini-2.0-flash-001"},"credentials":{"googlePalmApi":{"id":"ZK3aD9k31PG9XVBd","name":"Guitar's Gemini (babystoreroom@gmail.com)"}},"typeVersion":1},{"id":"cbc4fc7e-a866-44ca-9d82-f97baec71f18","name":"Edit Fields","type":"n8n-nodes-base.set","position":[780,-500],"parameters":{"options":{},"assignments":{"assignments":[{"id":"50797886-0fc6-4471-9e0a-554fcb9261e7","name":"body.events[0].message.text","type":"string","value":"={{ $('Webhook').item.json.body.events[0].message.text }}"},{"id":"ee4dce81-ed63-4c70-8517-ebc253123651","name":"body.events[0].replyToken","type":"string","value":"={{ $('Webhook').item.json.body.events[0].replyToken }}"},{"id":"65e06101-7d5c-4a25-ae5e-780acbf60037","name":"body.events[0].source.userId","type":"string","value":"={{ $json.body.events[0].source.userId }}"}]}},"typeVersion":3.4},{"id":"1ceb973b-1e8e-49fd-bad6-97f373f3e5f8","name":"HTTP Request","type":"n8n-nodes-base.httpRequest","position":[1276,-220],"parameters":{"url":"https://api.line.me/v2/bot/message/reply","method":"POST","options":{},"jsonBody":"={n "replyToken": "{{ $('Edit Fields').item.json.body.events[0].replyToken }}",n "messages": [n {n "type": "text",n "text": "{{ $('AI Agent').item.json.output.replaceAll('\t', ' ').replaceAll('\"', '\\\"').replaceAll('\n', '\\n').trim() || 'No response available.' }}"n }n ]n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer [channel access token here]"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2},{"id":"c17eef52-4696-465f-8185-edecf18480a5","name":"Get History","type":"n8n-nodes-base.googleSheets","position":[1000,-500],"parameters":{"options":{"outputFormatting":{"values":{"date":"FORMATTED_STRING","general":"UNFORMATTED_VALUE"}},"returnFirstMatch":true,"dataLocationOnSheet":{"values":{"rangeDefinition":"detectAutomatically"}}},"filtersUI":{"values":[{"lookupValue":"={{ $('Webhook').item.json.body.events[0].source.userId }}","lookupColumn":"UserID "}]},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1BlN0SnzGz5g5ovEkO7DZwG9oBAMpjrqcB2-szdycg0o/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"id","value":"1BlN0SnzGz5g5ovEkO7DZwG9oBAMpjrqcB2-szdycg0o"}},"credentials":{"googleSheetsOAuth2Api":{"id":"x419me4M1oO9tYO5","name":"[Guitar] Google Sheets (babystoreroom@gmail.com)"}},"notesInFlow":false,"typeVersion":4.5,"alwaysOutputData":true},{"id":"943174a5-7523-4367-92fd-4b92893dad93","name":"Prepare Prompt","type":"n8n-nodes-base.set","position":[1220,-500],"parameters":{"options":{},"assignments":{"assignments":[{"id":"0b55ebc2-46bf-4d19-b71c-6d32b0844cba","name":"Prompt","type":"string","value":"={{n "คุณคือลลิตา แชทบอทภาษาไทยที่สุภาพและเป็นมิตร ตอบตามบริบทของการสนทนา:\n" +nn ($('Get History').item.json.History_Archive_1 || "") +n (($('Get History').item.json.History_Archive_1) ? "\n" : "") +nn ($('Get History').item.json.History_Archive_2 || "") +n (($('Get History').item.json.History_Archive_2) ? "\n" : "") +nn ($('Get History').item.json.History_Archive_3 || "") +n (($('Get History').item.json.History_Archive_3) ? "\n" : "") +nn ($('Get History').item.json.History_Archive_4 || "") +n (($('Get History').item.json.History_Archive_4) ? "\n" : "") +nn ($('Get History').item.json.History || "") +n (($('Get History').item.json.History) ? "\n" : "") +nn "ผู้ใช้: " + $('Edit Fields').item.json.body.events[0].message.text + "\nลลิตา: "n}}n"}]}},"typeVersion":3.4},{"id":"d2f299f9-138f-42b5-b9cd-ba587dd1f36d","name":"Save History","type":"n8n-nodes-base.googleSheets","position":[1056,-220],"parameters":{"columns":{"value":{"History":"={{ $('Split History').item.json.historyToSave }}","UserID ":"={{ $('Edit Fields').item.json.body.events[0].source.userId }}","LastUpdated":"={{ new Date().toISOString() }}","History_Archive_1":"={{ $('Split History').item.json.historyArchive1 }}","History_Archive_2":"={{ $('Split History').item.json.historyArchive2 }}","History_Archive_3":"={{ $('Split History').item.json.historyArchive3 }}","History_Archive_4":"={{ $('Split History').item.json.historyArchive4 }}"},"schema":[{"id":"UserID ","type":"string","display":true,"removed":false,"required":false,"displayName":"UserID ","defaultMatch":false,"canBeUsedToMatch":true},{"id":"History","type":"string","display":true,"required":false,"displayName":"History","defaultMatch":false,"canBeUsedToMatch":true},{"id":"LastUpdated","type":"string","display":true,"required":false,"displayName":"LastUpdated","defaultMatch":false,"canBeUsedToMatch":true},{"id":"History_Archive_1","type":"string","display":true,"removed":false,"required":false,"displayName":"History_Archive_1","defaultMatch":false,"canBeUsedToMatch":true},{"id":"History_Archive_2","type":"string","display":true,"removed":false,"required":false,"displayName":"History_Archive_2","defaultMatch":false,"canBeUsedToMatch":true},{"id":"History_Archive_3","type":"string","display":true,"removed":false,"required":false,"displayName":"History_Archive_3","defaultMatch":false,"canBeUsedToMatch":true},{"id":"History_Archive_4","type":"string","display":true,"removed":false,"required":false,"displayName":"History_Archive_4","defaultMatch":false,"canBeUsedToMatch":true},{"id":"row_number","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"row_number","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["UserID "],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1BlN0SnzGz5g5ovEkO7DZwG9oBAMpjrqcB2-szdycg0o/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"id","value":"1BlN0SnzGz5g5ovEkO7DZwG9oBAMpjrqcB2-szdycg0o"}},"credentials":{"googleSheetsOAuth2Api":{"id":"x419me4M1oO9tYO5","name":"[Guitar] Google Sheets (babystoreroom@gmail.com)"}},"typeVersion":4.5},{"id":"857ff076-9f61-416d-b40e-ab07b1962689","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[460,-560],"parameters":{"content":"### Connect to Line Official Account's API"},"typeVersion":1},{"id":"4a60b10d-4bb8-4c2f-9225-349f28e82857","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[740,-560],"parameters":{"width":180,"content":"Prepare the data"},"typeVersion":1},{"id":"500bb775-8d2d-4126-8afb-e15e3237a13a","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[960,-560],"parameters":{"width":180,"content":"Retrieve chat history"},"typeVersion":1},{"id":"24d860de-012e-4eae-86b9-172756a8c47a","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1180,-560],"parameters":{"width":180,"content":"Give our AI previous chat history"},"typeVersion":1},{"id":"22632dcb-fe1f-4baa-a819-6db0c2683f72","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[460,-280],"parameters":{"content":"Get input with this command. "{{ $json.Prompt }}""},"typeVersion":1},{"id":"5751e7ac-a51c-4306-8800-7419add7eb5d","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[780,-280],"parameters":{"width":180,"content":"Split history into small chunks (data cleaning)"},"typeVersion":1},{"id":"593ba6b5-3644-44f4-b13f-db1848f31cc5","name":"Split History","type":"n8n-nodes-base.code","position":[840,-220],"parameters":{"jsCode":"// Get the current history, new message, and responsenlet history = $('Get History').item.json.History || '';nlet message = $('Edit Fields').item.json.body.events[0].message.text;nlet response = $json.output;nlet newExchange = `ผู้ใช้: ${message}\nลลิตา: ${response}`;nlet updatedHistory = history + (history ? '\n' : '') + newExchange;nn// Threshold: 70% of Google Sheets cell limit (50,000 characters * 0.7 = 35,000)nconst threshold = 35000;nlet historyToSave = updatedHistory;nlet archive1 = $('Get History').item.json.History_Archive_1 || '';nlet archive2 = $('Get History').item.json.History_Archive_2 || '';nlet archive3 = $('Get History').item.json.History_Archive_3 || '';nlet archive4 = $('Get History').item.json.History_Archive_4 || '';nn// If history exceeds threshold, split itnif (updatedHistory.length > threshold) {n // Keep the last 17,500 characters in History (half of threshold for balance)n const keepLength = 17500;n const archiveChunk = updatedHistory.substring(0, updatedHistory.length - keepLength);n historyToSave = updatedHistory.substring(updatedHistory.length - keepLength);nn // Distribute to archive cells, ensuring none exceed 35,000 charactersn if (archive1.length < threshold) {n archive1 = (archive1 ? archive1 + '\n' : '') + archiveChunk;n if (archive1.length > threshold) {n const excess = archive1.substring(threshold);n archive1 = archive1.substring(0, threshold);n if (archive2.length < threshold) {n archive2 = (archive2 ? archive2 + '\n' : '') + excess;n }n }n }n if (archive2.length < threshold && archive1.length >= threshold) {n archive2 = (archive2 ? archive2 + '\n' : '') + archiveChunk;n if (archive2.length > threshold) {n const excess = archive2.substring(threshold);n archive2 = archive2.substring(0, threshold);n if (archive3.length < threshold) {n archive3 = (archive3 ? archive3 + '\n' : '') + excess;n }n }n }n if (archive3.length < threshold && archive2.length >= threshold) {n archive3 = (archive3 ? archive3 + '\n' : '') + archiveChunk;n if (archive3.length > threshold) {n const excess = archive3.substring(threshold);n archive3 = archive3.substring(0, threshold);n if (archive4.length < threshold) {n archive4 = (archive4 ? archive4 + '\n' : '') + excess;n }n }n }n if (archive4.length < threshold && archive3.length >= threshold) {n archive4 = (archive4 ? archive4 + '\n' : '') + archiveChunk;n if (archive4.length > threshold) {n archive4 = archive4.substring(0, threshold);n }n }n}nn// Return the values to updatenreturn [n {n json: {n historyToSave: historyToSave,n historyArchive1: archive1,n historyArchive2: archive2,n historyArchive3: archive3,n historyArchive4: archive4,n lastUpdated: new Date().toISOString()n }n }n];"},"typeVersion":2},{"id":"6eee6213-ee30-4da8-882b-8837f6c7951e","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1000,-280],"parameters":{"width":180,"content":"Save to Google Sheets"},"typeVersion":1},{"id":"afadf4f8-5229-4feb-af24-6ba6d0c8bf6e","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[1220,-280],"parameters":{"width":180,"content":"Send it back to Line"},"typeVersion":1}],"active":true,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"77aadf69-8be6-4a35-9a71-c161a7ea10e5","connections":{"Webhook":{"main":[[{"node":"Edit Fields","type":"main","index":0}]]},"AI Agent":{"main":[[{"node":"Split History","type":"main","index":0}]]},"Edit Fields":{"main":[[{"node":"Get History","type":"main","index":0}]]},"Get History":{"main":[[{"node":"Prepare Prompt","type":"main","index":0}]]},"Save History":{"main":[[{"node":"HTTP Request","type":"main","index":0}]]},"Split History":{"main":[[{"node":"Save History","type":"main","index":0}]]},"Prepare Prompt":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]}}}
  • CSV
  • Sheet
  • Spreadsheet
  • GS
  • API
  • Request
  • URL
  • Build
  • cURL
  • cpde
  • Javascript
  • JS
  • Python
  • Script
  • Custom Code
  • Function
  • LangChain
  • Chat
  • Conversational
  • Plan and Execute
  • ReAct
  • Tools
Planeta AI 2025 
magic-wandmenu linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram