Darmowy szablon automatyzacji

Otrzymaj codzienny plan ćwiczeń z Flex Message przez LINE

1458
25 dni temu
31
bloków


Opis automatyzacji YogiAI w n8n

Workflow YogiAI automatyzuje wysyłanie codziennych przypomnień o pozycjach jogi oraz powiązanych informacji poprzez wiadomości push w aplikacji Line. Automatyzacja wykorzystuje dane z bazy danych Google Sheets, zawierającej szczegóły pozycji jogi, takie jak nazwy, adresy URL obrazów i linki, aby zapewnić użytkownikom spersonalizowane i angażujące treści każdego dnia.

Cel

  • Dostarczanie użytkownikom codziennych sugestii dotyczących pozycji jogi, dopasowanych do ich praktyki.
  • Dostarczanie atrakcyjnych wizualnie i informacyjnych treści poprzez Flex Messages w Line, w tym obrazów i klikalnych linków.
  • Logowanie interakcji użytkowników i preferencji z powrotem do Google Sheets w celu udoskonalenia przyszłych rekomendacji.

Kluczowe funkcje

  • Automatyczne codzienne przypomnienia: Wysyła starannie dobraną listę pozycji jogi o ustalonym czasie (21:30 czasu bangkockiego).
  • Dynamiczne generowanie treści: Wykorzystuje AI do przepisywania i formatowania wiadomości w przyjazny dla użytkownika sposób, z emoji i jasnymi instrukcjami.
  • Integracja z Google Sheets: Pobiera dane z wcześniej zdefiniowanego arkusza Google i loguje interakcje w celu ciągłego doskonalenia.
  • Konfigurowalne wiadomości: Gwarantuje prawidłowe formatowanie wyjść JSON dla API Flex Message w Line, umożliwiając interaktywne i bogate wizualnie treści.

Źródło danych

Struktura Google Sheets

Workflow opiera się na arkuszu Google o następującej strukturze:

  • PoseName: Nazwa pozycji jogi.
  • uri: Adres URL obrazu przedstawiającego pozycję.
  • url: Klikalny link kierujący użytkowników do dodatkowych informacji o pozycji.

Przykładowy układ danych

  • Supine Angle
  • https://example.com/SupineAngle-tn146.png
  • https://example.com/pose/SupineAngle
  • Warrior II
  • https://example.com/WarriorII-tn146.png
  • https://example.com/pose/WarriorII

Uwaga: Upewnij się, że zaktualizujesz arkusz Google własnymi danymi. Odwołaj się do przykładowego arkusza jako referencji.

Harmonogram wyzwalania

Workflow jest uruchamiany codziennie o 21:30 (9:30 PM) czasu bangkockiego (Asia/Bangkok). Zapewnia to terminowe dostarczanie przypomnień użytkownikom, utrzymując ich zaangażowanie w praktykę jogi.

Proces workflow

Pobieranie danych

  • Węzeł: Get PoseName: Pobiera szczegóły pozycji jogi z określonego zakresu w arkuszu Google.

Generowanie treści

  • Węzeł: WritePosesToday: Wykorzystuje Azure OpenAI do tworzenia przyjaznych dla użytkownika tekstów, z emoji i jasnymi instrukcjami.
  • Węzeł: RewritePosesToday: Formatuje tekst wygenerowany przez AI specjalnie dla wiadomości w Line, zapewniając kompatybilność i atrakcyjność wizualną.

Formatowanie JSON

  • Węzeł: WriteJSONflex: Generuje struktury JSON wymagane dla Flex Messages w Line, umożliwiając wyświetlanie karuzeli obrazów pozycji jogi i linków.
  • Węzeł: Fix JSON: Zapewnia prawidłowe formatowanie wszystkich wyjść JSON przed wysłaniem przez Line.

Dostarczanie wiadomości

  • Węzeł: Line Push with Flex Bubble: Wysyła końcową wiadomość, zawierającą zarówno tekst, jak i karuzele Flex Message, bezpośrednio do użytkowników poprzez wiadomości push w Line.

Logowanie interakcji

  • Węzły: YogaLog & YogaLog2: Loguje każdą interakcję z powrotem do arkusza Google, śledząc, które pozycje zostały wysłane i jak często się pojawiają, udoskonalając przyszłe rekomendacje.

Wymagania wstępne konfiguracji

  • Konto Google Sheets: Skonfiguruj arkusz Google z wymaganą strukturą i wypełnij go danymi dotyczącymi pozycji jogi.
  • Konto deweloperskie Line: Utwórz kanał Line, aby uzyskać niezbędne dane uwierzytelniające do wysyłania wiadomości push.
  • Konto Azure OpenAI: Skonfiguruj dostęp do usług Azure OpenAI w celu generowania i formatowania treści.

Docelowi odbiorcy

Ten workflow jest idealny dla:

  • Instruktorów jogi: Poszukujących sposobów na zaangażowanie uczniów codziennymi sugestiami dotyczącymi pozycji.
  • Entuzjastów fitnessu: Chcących utrzymać regularność w swojej praktyce jogi.
  • Twórców treści: Zainteresowanych automatyzacją spersonalizowanej i atrakcyjnej wizualnie dystrybucji treści.

Przykłady zastosowań

Automatyzacja YogiAI może być wykorzystana w różnych scenariuszach, aby zwiększyć zaangażowanie użytkowników i usprawnić procesy. Oto kilka potencjalnych zastosowań:

  • Wysyłanie codziennych wyzwań jogi dla członków społeczności fitness.
  • Automatyczne przypominanie uczestnikom wyzwań jogi o codziennych pozycjach do wykonania.
  • Dostarczanie spersonalizowanych treści dla klientów subskrybujących newsletter jogowy.
  • Integracja z aplikacjami wellness w celu uzupełnienia ich funkcjonalności o codzienne wskazówki dotyczące jogi.
  • Wspieranie programów korporacyjnych wellness poprzez dostarczanie pracownikom codziennych inspiracji do ćwiczeń.
  • Automatyzacja procesu edukacyjnego dla uczniów szkół jogi, zapewniająca im regularne materiały do nauki.
  • Tworzenie angażujących treści dla mediów społecznościowych, opartych na codziennych pozycjach jogi.


   Skopiuj kod szablonu   
{"id":"2DzQ1FH11S3Gp6wn","meta":{"instanceId":"558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a","templateCredsSetupCompleted":true},"name":"YogiAI","tags":[],"nodes":[{"id":"2afc390e-d774-4db4-a52f-138f13837646","name":"Azure OpenAI Chat Model2","type":"@n8n/n8n-nodes-langchain.lmChatAzureOpenAi","position":[1040,0],"parameters":{"model":"4o","options":{"temperature":0.8}},"credentials":{"azureOpenAiApi":{"id":"5AjoWhww5SQi2VXd","name":"Azure Open AI account"}},"typeVersion":1},{"id":"529d9ed9-3ae5-41cb-983e-874aa37ee1c7","name":"YogaLog","type":"n8n-nodes-base.googleSheets","position":[2240,-100],"parameters":{"columns":{"value":{"Date":"={{ $('Trigger 2130 YogaPosesToday').first().json.timestamp }}","JSON":"={{ $('CombineAll').item.json.LineBody }}","Text":"={{ $('RewritePosesToday').item.json.text }}"},"schema":[{"id":"Date","type":"string","display":true,"removed":false,"required":false,"displayName":"Date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Text","type":"string","display":true,"required":false,"displayName":"Text","defaultMatch":false,"canBeUsedToMatch":true},{"id":"JSON","type":"string","display":true,"removed":false,"required":false,"displayName":"JSON","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["Date"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":325576327,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1s_yzDNbbtXhfoOKUlmBHwhgWkR2FuoiKz4WQOu4tQmk/edit#gid=325576327","cachedResultName":"YogaLog"},"documentId":{"__rl":true,"mode":"list","value":"1s_yzDNbbtXhfoOKUlmBHwhgWkR2FuoiKz4WQOu4tQmk","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1s_yzDNbbtXhfoOKUlmBHwhgWkR2FuoiKz4WQOu4tQmk/edit?usp=drivesdk","cachedResultName":"SerenityAI"}},"credentials":{"googleSheetsOAuth2Api":{"id":"TKSdrVOdpgxWBVk8","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"d491b5c3-31ab-49b2-abc3-8c2a67cf9571","name":"Azure OpenAI Chat Model3","type":"@n8n/n8n-nodes-langchain.lmChatAzureOpenAi","position":[2360,120],"parameters":{"model":"4o","options":{}},"credentials":{"azureOpenAiApi":{"id":"5AjoWhww5SQi2VXd","name":"Azure Open AI account"}},"typeVersion":1},{"id":"3b1ebdcb-9e6b-437c-8f51-944218c0c276","name":"Auto-fixing Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserAutofixing","position":[2520,80],"parameters":{"options":{}},"typeVersion":1},{"id":"3fc67522-501c-4e43-bf9d-b367d57ad4f9","name":"Azure OpenAI Chat Model1","type":"@n8n/n8n-nodes-langchain.lmChatAzureOpenAi","position":[2540,120],"parameters":{"model":"4o","options":{}},"credentials":{"azureOpenAiApi":{"id":"5AjoWhww5SQi2VXd","name":"Azure Open AI account"}},"typeVersion":1},{"id":"19bd208b-a5c5-47b3-a2cc-e92a71444be7","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[2640,220],"parameters":{"schemaType":"manual","inputSchema":"{n "type": "object",n "properties": {n "yogaPoses": {n "type": "array",n "items": {n "type": "object",n "properties": {n "sequence": { "type": "integer" },n "name": { "type": "string" }n },n "required": ["sequence", "name"],n "additionalProperties": falsen }n }n },n "required": ["yogaPoses"]n}"},"typeVersion":1.2},{"id":"2bf3f3d3-84c7-4fd4-b1b9-8c0fb7df44b1","name":"AI Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[2400,-60],"parameters":{"text":"=You'll change this into properly format of JSON without having emoji. You'll also make sure the name is matched the data in googlesheetnn {{ $json.Text }}","options":{},"promptType":"define","hasOutputParser":true},"typeVersion":1.7},{"id":"fa3fc89e-54d8-4706-af59-72dbd80fbef4","name":"PosesDatabase1","type":"n8n-nodes-base.googleSheetsTool","position":[2480,220],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":1104924292,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1s_yzDNbbtXhfoOKUlmBHwhgWkR2FuoiKz4WQOu4tQmk/edit#gid=1104924292","cachedResultName":"Yoga"},"documentId":{"__rl":true,"mode":"list","value":"1s_yzDNbbtXhfoOKUlmBHwhgWkR2FuoiKz4WQOu4tQmk","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1s_yzDNbbtXhfoOKUlmBHwhgWkR2FuoiKz4WQOu4tQmk/edit?usp=drivesdk","cachedResultName":"SerenityAI"},"descriptionType":"manual","toolDescription":"Yoga Poses Database to readn"},"credentials":{"googleSheetsOAuth2Api":{"id":"TKSdrVOdpgxWBVk8","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"ff7bd540-c89b-43d1-bb07-bb060a6b4ba6","name":"YogaLog2","type":"n8n-nodes-base.googleSheets","position":[2980,20],"parameters":{"columns":{"value":{"Date":"={{ $('Trigger 2130 YogaPosesToday').first().json.timestamp }}","Pose":"={{ $json.name }}","Sequence":"={{ $json.sequence }}"},"schema":[{"id":"Date","type":"string","display":true,"removed":false,"required":false,"displayName":"Date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Sequence","type":"string","display":true,"removed":false,"required":false,"displayName":"Sequence","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Pose","type":"string","display":true,"removed":false,"required":false,"displayName":"Pose","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["Date"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":2060471945,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1s_yzDNbbtXhfoOKUlmBHwhgWkR2FuoiKz4WQOu4tQmk/edit#gid=2060471945","cachedResultName":"YogaLog2"},"documentId":{"__rl":true,"mode":"list","value":"1s_yzDNbbtXhfoOKUlmBHwhgWkR2FuoiKz4WQOu4tQmk","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1s_yzDNbbtXhfoOKUlmBHwhgWkR2FuoiKz4WQOu4tQmk/edit?usp=drivesdk","cachedResultName":"SerenityAI"}},"credentials":{"googleSheetsOAuth2Api":{"id":"TKSdrVOdpgxWBVk8","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"f649c5b9-fad1-412c-8389-ed53b95e5583","name":"Split Out","type":"n8n-nodes-base.splitOut","position":[2740,-120],"parameters":{"options":{},"fieldToSplitOut":"output.yogaPoses"},"typeVersion":1},{"id":"8194e695-fa9e-4555-9da5-b7dbdc1b0e4a","name":"Trigger 2130 YogaPosesToday","type":"n8n-nodes-base.scheduleTrigger","position":[-200,-20],"parameters":{"rule":{"interval":[{"triggerAtHour":21,"triggerAtMinute":30}]}},"typeVersion":1.2},{"id":"3b5706d8-4968-4b9c-a255-7d1f806d85dc","name":"Azure OpenAI Chat Model5","type":"@n8n/n8n-nodes-langchain.lmChatAzureOpenAi","position":[1340,180],"parameters":{"model":"4o","options":{"temperature":0.9}},"credentials":{"azureOpenAiApi":{"id":"5AjoWhww5SQi2VXd","name":"Azure Open AI account"}},"typeVersion":1},{"id":"acee6e43-f094-4f30-bffb-6c56b0425327","name":"Get PoseName","type":"n8n-nodes-base.googleSheets","position":[40,-20],"parameters":{"options":{"dataLocationOnSheet":{"values":{"range":"B18:D28","rangeDefinition":"specifyRangeA1"}}},"sheetName":{"__rl":true,"mode":"list","value":2035276041,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1s_yzDNbbtXhfoOKUlmBHwhgWkR2FuoiKz4WQOu4tQmk/edit#gid=2035276041","cachedResultName":"NotePad"},"documentId":{"__rl":true,"mode":"list","value":"1s_yzDNbbtXhfoOKUlmBHwhgWkR2FuoiKz4WQOu4tQmk","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1s_yzDNbbtXhfoOKUlmBHwhgWkR2FuoiKz4WQOu4tQmk/edit?usp=drivesdk","cachedResultName":"SerenityAI"}},"credentials":{"googleSheetsOAuth2Api":{"id":"TKSdrVOdpgxWBVk8","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"6be3a88c-4e0f-44e6-97c1-eafa13230ae7","name":"WritePosesToday","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[1120,-160],"parameters":{"text":"=Let's calm down and focus on these poses today.nn{{ $('Code').item.json.poseNamesOnly }}nnhave a great practice!","messages":{"messageValues":[{"message":"=You're experienced yoga instructor. You'll say the topic and asking the student to focus on practice today. You'll later give the yoga poses list for practicing today. You will also include related pose or variation from the list. You'll make sure to include all the poses from the list.n"}]},"promptType":"define"},"retryOnFail":true,"typeVersion":1.5},{"id":"8d9cdf4c-a432-44ff-a0a3-133fbc8e9daa","name":"RewritePosesToday","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[1180,60],"parameters":{"text":"={{ $json.text }}","messages":{"messageValues":[{"message":"=You'll format and add emoji before the poses name to make it chat-friendly to send via Line. You will only return the message to be sent.nnIf the message is too long, you'll split by ====== to 3 messagesn"}]},"promptType":"define"},"retryOnFail":true,"typeVersion":1.5},{"id":"2e419654-1f83-48df-8ac0-9ec621444cc2","name":"Azure OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatAzureOpenAi","position":[480,100],"parameters":{"model":"4o","options":{"temperature":0.9}},"credentials":{"azureOpenAiApi":{"id":"5AjoWhww5SQi2VXd","name":"Azure Open AI account"}},"typeVersion":1},{"id":"ad1bf966-114e-4bb8-abff-f5768e907aff","name":"WriteJSONflex","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[580,-80],"parameters":{"text":"={{ $json.outputText }}","messages":{"messageValues":[{"message":"=You are JSON parser, you'll write JSON in this format for all the row in 'GetPoseName' You'll notice the differnet between uri and url.nn{n"type": "bubble",n"hero": {n"type": "image",n"url": "https://pocketyoga.com/assets/images/thumbnails146/SupineAngle-tn146.png ", n"size": "full",n"aspectRatio": "20:13",n"aspectMode": "fit",n"action": {n"type": "uri",n"uri": "https://pocketyoga.com/pose/SupineAngle "n}n},n"body": {n"type": "box",n"layout": "vertical",n"contents": [n{n"type": "text",n"text": "Supine Angle (supta konasana)",n"size": "lg",n"wrap": true,n"action": {n"type": "message",n"label": "action",n"text": "Supine Angle (supta konasana)"n}n}n]n}n},n{n"type": "bubble",n"hero": {n"type": "image",n"url": "https://pocketyoga.com/assets/images/thumbnails146/SupineAngle-tn146.png ",n"size": "full",n"aspectRatio": "20:13",n"aspectMode": "fit",n"action": {n"type": "uri",n"uri": "https://pocketyoga.com/pose/SupineAngle "n}n},n"body": {n"type": "box",n"layout": "vertical",n"contents": [n{n"type": "text",n"text": "Supine Angle (supta konasana)",n"size": "lg",n"wrap": true,n"action": {n"type": "message",n"label": "action",n"text": "Supine Angle (supta konasana)"n}n}n]n}n}"}]},"promptType":"define","hasOutputParser":true},"retryOnFail":true,"typeVersion":1.5},{"id":"1e6af9e5-675d-4d9a-aba6-304d218ea138","name":"Structured Output Parser1","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[780,220],"parameters":{"jsonSchemaExample":"[n {n "type": "bubble",n "hero": {n "type": "image",n "url": "https://pocketyoga.com/assets/images/thumbnails146/SupineAngle-tn146.png",n "size": "full",n "aspectRatio": "20:13",n "aspectMode": "fit",n "action": {n "type": "uri",n "uri": "https://pocketyoga.com/pose/SupineAngle"n }n },n "body": {n "type": "box",n "layout": "vertical",n "contents": [n {n "type": "text",n "text": "Supine Angle (supta konasana)",n "size": "lg",n "wrap": true,n "action": {n "type": "message",n "label": "action",n "text": "Supine Angle (supta konasana)"n }n }n ]n }n },n {n "type": "bubble",n "hero": {n "type": "image",n "url": "https://pocketyoga.com/assets/images/thumbnails146/SupineAngle-tn146.png",n "size": "full",n "aspectRatio": "20:13",n "aspectMode": "fit",n "action": {n "type": "uri",n "uri": "https://pocketyoga.com/pose/SupineAngle"n }n },n "body": {n "type": "box",n "layout": "vertical",n "contents": [n {n "type": "text",n "text": "Supine Angle (supta konasana)",n "size": "lg",n "wrap": true,n "action": {n "type": "message",n "label": "action",n "text": "Supine Angle (supta konasana)"n }n }n ]n }n }n]"},"typeVersion":1.2},{"id":"5559c5b9-6c2c-4adb-9544-79be3f1f85d1","name":"Auto-fixing Output Parser1","type":"@n8n/n8n-nodes-langchain.outputParserAutofixing","position":[680,80],"parameters":{"options":{}},"typeVersion":1},{"id":"2335f74e-3fe6-4720-bb88-1bbda320ae8b","name":"Azure OpenAI Chat Model6","type":"@n8n/n8n-nodes-langchain.lmChatAzureOpenAi","position":[640,200],"parameters":{"model":"4o","options":{}},"credentials":{"azureOpenAiApi":{"id":"5AjoWhww5SQi2VXd","name":"Azure Open AI account"}},"typeVersion":1},{"id":"83d02971-bdf6-4c45-b705-f2f49fa49525","name":"Azure OpenAI Chat Model4","type":"@n8n/n8n-nodes-langchain.lmChatAzureOpenAi","position":[1780,200],"parameters":{"model":"4o","options":{"temperature":0.5}},"credentials":{"azureOpenAiApi":{"id":"5AjoWhww5SQi2VXd","name":"Azure Open AI account"}},"typeVersion":1},{"id":"5e5c1c11-cf3d-47f4-91ce-14d7e3f493fb","name":"Code","type":"n8n-nodes-base.code","position":[240,-20],"parameters":{"jsCode":"const items = $input.all();nnlet outputText = "";nlet poseNamesList = []; // New list to store only PoseNamesnnitems.forEach(item => {n const { PoseName, uri, url } = item.json;n outputText += `Name: ${PoseName}\nuri: ${uri}\nurl: ${url}\n\n`;n poseNamesList.push(PoseName); // Add PoseName to the listn});nnreturn [n {n json: {n outputText, // Original formatted textn poseNamesOnly: poseNamesList.join('\n') // New: PoseNames as text listn }n }n];"},"typeVersion":2},{"id":"864e2fbb-a9dc-43ba-918e-0197821de598","name":"Line Push with Flex Bubble","type":"n8n-nodes-base.httpRequest","position":[1980,-80],"parameters":{"url":"https://api.line.me/v2/bot/message/push","method":"POST","options":{},"jsonBody":"={{ $json.text }}","sendBody":true,"specifyBody":"json","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"yiPG7xPwvDzsY0Qd","name":"Line @511dizji"}},"retryOnFail":false,"typeVersion":4.2},{"id":"91e50734-8899-4d23-9a4f-ce637d9e5ed1","name":"CombineAll","type":"n8n-nodes-base.set","position":[1640,-100],"parameters":{"options":{},"assignments":{"assignments":[{"id":"9c82e62c-dfbc-4b09-899d-f4d1581e1c15","name":"LineBody","type":"string","value":"={n "to": "Ue9cc622e33e5333e3784298412ec9aed",n "messages": [n {n "type": "text",n "text": "{{ $json.text.replaceAll("\n","\\n").replaceAll("\n","").removeMarkdown().removeTags().replaceAll('"',"") }}"n },n {n "type": "flex",n "altText": "Yoga Poses Images",n "contents": {n "type": "carousel",n "contents": [ {{ $('WriteJSONflex').all().flatMap(item => JSON.stringify(item.json.output)).join(',') }}nn ] n }n }n ]n}"}]}},"typeVersion":3.4},{"id":"dc6d5dfe-66ad-49ca-b246-ee52f270269d","name":"Fix JSON","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[1720,120],"parameters":{"text":"=Fix this JSONnn{{ $json.LineBody }}","messages":{"messageValues":[{"message":"=You are JSON formatter, You'll fix the JSON and return only the JSON that has been fixed. Do not explain or write anything else"}]},"promptType":"define","hasOutputParser":true},"retryOnFail":true,"typeVersion":1.5},{"id":"a062cf06-f438-4d1e-9c0c-d2fc00f40071","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-300,-380],"parameters":{"color":5,"width":260,"height":240,"content":"## YogiAInnThis YogiAI is to provide daily reminder and pose of the day to the user via Line Push MessagennThe data will be generated from GoogleSheet Weighted Random Poses and Push to your Line at the scheduled timenn"},"typeVersion":1},{"id":"8d2184a9-af30-4b1e-826b-69a8f37d8256","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[0,-320],"parameters":{"color":4,"width":400,"height":500,"content":"## Get the DatanThis is to get the data from GoogleSheet nnIn the range we got, we'll have PosesName, uri (image link), and url (link when clicked) nnThe sample is here nhttps://docs.google.com/spreadsheets/d/1eqLJsUL_QkOMy_qPzNCrUCZdx36asC8P1i3PowTQqLY/edit?usp=sharingnnThe data is from https://pocketyoga.com/pose/nn***YOU SHOULD UPDATE IT WITH YOUR OWN DATA***"},"typeVersion":1},{"id":"6d688a1c-90aa-4c3a-a868-946c61cec7cf","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[440,-320],"parameters":{"color":2,"width":540,"height":660,"content":"## Write FlexMessage for ImagesnnTo send the information in Line, we need to write a JSON for Flex Message meaning that it can slides to show the images of the posennWe use auto-parser here to make sure the JSON followed the required formatnnhttps://developers.line.biz/en/docs/messaging-api/using-flex-messages/nnYou can also use https://developers.line.biz/flex-simulator/?status=success to simulate the format "},"typeVersion":1},{"id":"e5b92f32-e282-49cd-8084-68e380572ee9","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1000,-320],"parameters":{"color":2,"width":540,"height":660,"content":"## Write Text for Poses today nnThis node we want to have user friendly text such as with emojis, etc. So, we give Azure OpenAI the poses of today and ask it to rewrie"},"typeVersion":1},{"id":"38cc9d2f-be2c-4448-9746-5d533108df7c","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1600,-320],"parameters":{"color":3,"width":540,"height":660,"content":"## Combine the result and push it via Linenn1) We used 'Edit Field' to combine all the outputn(Hint: you can have input_txt and output_txt to debug your script here)n2) To make sure that our JSON is proper, we asked AI to fix it again. n3) Use Line Push >> Please replace "to" to your own UID and create the header authorization with the channel you havennhttps://developers.line.biz/en/docs/messaging-api/sending-messages/n"},"typeVersion":1},{"id":"b88d6f78-ce54-4b83-b009-e4e22e518c7c","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[2200,-320],"parameters":{"color":6,"width":1020,"height":660,"content":"## Write back the data into Log and Log2 nnWe used log2 to count how many time we send each poses and weighted this back into the 'Yoga' Sheet to make the random more random ;)nnTo put the data back, we also want to extract from the output and split it out to put back to google sheet"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"timezone":"Asia/Bangkok","callerPolicy":"workflowsFromSameOwner","executionOrder":"v1"},"versionId":"8d3482ff-25e6-479f-a33b-b33d1aeb51fc","connections":{"Code":{"main":[[{"node":"WriteJSONflex","type":"main","index":0}]]},"YogaLog":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"AI Agent":{"main":[[{"node":"Split Out","type":"main","index":0}]]},"Fix JSON":{"main":[[{"node":"Line Push with Flex Bubble","type":"main","index":0}]]},"YogaLog2":{"main":[[]]},"Split Out":{"main":[[{"node":"YogaLog2","type":"main","index":0}]]},"CombineAll":{"main":[[{"node":"Fix JSON","type":"main","index":0}]]},"Get PoseName":{"main":[[{"node":"Code","type":"main","index":0}]]},"WriteJSONflex":{"main":[[{"node":"WritePosesToday","type":"main","index":0}]]},"PosesDatabase1":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"WritePosesToday":{"main":[[{"node":"RewritePosesToday","type":"main","index":0}]]},"RewritePosesToday":{"main":[[{"node":"CombineAll","type":"main","index":0}]]},"Azure OpenAI Chat Model":{"ai_languageModel":[[{"node":"WriteJSONflex","type":"ai_languageModel","index":0}]]},"Azure OpenAI Chat Model1":{"ai_languageModel":[[{"node":"Auto-fixing Output Parser","type":"ai_languageModel","index":0}]]},"Azure OpenAI Chat Model2":{"ai_languageModel":[[{"node":"WritePosesToday","type":"ai_languageModel","index":0}]]},"Azure OpenAI Chat Model3":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"Azure OpenAI Chat Model4":{"ai_languageModel":[[{"node":"Fix JSON","type":"ai_languageModel","index":0}]]},"Azure OpenAI Chat Model5":{"ai_languageModel":[[{"node":"RewritePosesToday","type":"ai_languageModel","index":0}]]},"Azure OpenAI Chat Model6":{"ai_languageModel":[[{"node":"Auto-fixing Output Parser1","type":"ai_languageModel","index":0}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"Auto-fixing Output Parser","type":"ai_outputParser","index":0}]]},"Auto-fixing Output Parser":{"ai_outputParser":[[{"node":"AI Agent","type":"ai_outputParser","index":0}]]},"Structured Output Parser1":{"ai_outputParser":[[{"node":"Auto-fixing Output Parser1","type":"ai_outputParser","index":0}]]},"Auto-fixing Output Parser1":{"ai_outputParser":[[{"node":"WriteJSONflex","type":"ai_outputParser","index":0}]]},"Line Push with Flex Bubble":{"main":[[{"node":"YogaLog","type":"main","index":0}]]},"Trigger 2130 YogaPosesToday":{"main":[[{"node":"Get PoseName","type":"main","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
  • json
  • zod
Planeta AI 2025 
magic-wandmenu linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram