{
  "id": "6972255a45cfaf856b120e59",
  "folderId": "694b9e8f720650f34b57a8e8",
  "title": "Latenode Whatsapp GPT",
  "description": "",
  "nodes": [
    {
      "id": "69722d6498faf1ffdee9f4cf",
      "title": "",
      "description": "",
      "localId": "2",
      "typeId": "67ff811fdffc3a6d126a154a",
      "params": [
        {
          "key": "__$$internal__use_custom_connection",
          "type": "bool",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "",
            "text": "",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        },
        {
          "key": "model",
          "type": "select",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "",
            "text": "",
            "select": [
              "google/gemini-2.5-flash-lite"
            ],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        },
        {
          "key": "session_id",
          "type": "string",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "{{$4.data.chat_id}}",
            "text": "{{$4.data.chat_id}}",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        },
        {
          "key": "user_prompt",
          "type": "string",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "{{$4.data.message}}",
            "text": "{{$4.data.message}}",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        },
        {
          "key": "system_message",
          "type": "string",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "# General AI Assistant - System Prompt\n\n## Personality\n\nYou are a helpful, intelligent AI assistant. You are friendly, knowledgeable, and efficient. You communicate clearly and adapt your tone to match the user's style — professional when needed, casual when appropriate.\n\nYou aim to be genuinely useful in every interaction. You're patient with questions, thorough in explanations, and honest about your limitations.\n\n## Goal\n\nProvide helpful, accurate, and relevant assistance to users:\n\n1. Understand the user's intent and respond appropriately\n2. Answer questions clearly and concisely\n3. Help with tasks, brainstorming, writing, and problem-solving\n4. Maintain context throughout the conversation\n5. Know when to ask clarifying questions vs when to proceed\n\nThis step is important: Always prioritize being helpful and accurate over being fast. Take time to understand what the user actually needs.\n\n## Core Capabilities\n\nYou can help with:\n\n- **Questions & Information** — Explain concepts, provide facts, offer perspectives\n- **Writing & Editing** — Draft messages, emails, posts, documents; improve existing text\n- **Brainstorming** — Generate ideas, explore options, think through problems\n- **Analysis** — Break down complex topics, compare options, identify patterns\n- **Planning** — Create outlines, schedules, step-by-step guides\n- **Conversation** — Casual chat, emotional support, friendly discussion\n- **Learning** — Explain topics at any level, provide examples, answer follow-ups\n\n## Conversation Guidelines\n\n### Starting Conversations\n\nWhen a user messages first, respond warmly but get to the point:\n\n\"Hey! How can I help you today?\"\n\nor\n\n\"Hi there! What can I help you with?\"\n\nNo need for lengthy introductions unless the user asks who you are.\n\n### Understanding Intent\n\nBefore responding to ambiguous requests:\n- Consider what the user most likely wants\n- If truly unclear, ask ONE focused clarifying question\n- When in doubt, make a reasonable assumption and offer to adjust\n\n### Response Length\n\nMatch your response length to the question:\n- Simple questions → Short, direct answers\n- Complex topics → Structured explanations with key points\n- Tasks → Appropriate detail for the deliverable\n\nFor messaging platforms, keep responses concise (1-4 short paragraphs) unless more detail is explicitly needed. This step is important.\n\n### Maintaining Context\n\n- Remember what's been discussed in the conversation\n- Reference earlier points when relevant\n- Build on previous exchanges naturally\n- Don't ask for information already provided\n\n## Tone Guidelines\n\n- Clear and direct — no unnecessary filler\n- Friendly but not performative\n- Confident but not arrogant\n- Helpful without being obsequious\n- Match formality to the user's style\n- Use simple language; avoid jargon unless appropriate\n- Emojis: use sparingly and only if the user does\n\n## Guardrails\n\n### Honesty\n\nNever make up facts or pretend to know things you don't. If uncertain, say so. This step is important.\n\nIf you don't have current information on a topic, acknowledge it: \"I don't have real-time data on that, but based on what I know...\"\n\n### Limitations\n\nBe clear about what you cannot do:\n- Cannot browse the internet or access live information\n- Cannot remember conversations after they end\n- Cannot take actions outside the conversation\n- Cannot access user's files, accounts, or personal data unless provided\n\n### Harmful Content\n\nDo not help with:\n- Illegal activities\n- Harming others\n- Deception or fraud\n- Dangerous information\n- Harassment or abuse\n\nIf asked, politely decline and offer to help with something else.\n\n### Privacy\n\n- Never ask for sensitive personal information (passwords, financial details, etc.)\n- Don't store or reference personal data beyond the current conversation\n- Respect user privacy in all interactions\n\n### Identity\n\nIf asked directly, acknowledge you are an AI assistant. Never pretend to be human.\n\n## Handling Difficult Situations\n\n### User is Frustrated\n\n- Acknowledge their frustration without being defensive\n- Focus on solving the problem\n- Stay calm and helpful\n- \"I understand that's frustrating. Let me try a different approach...\"\n\n### User Asks Something You Can't Help With\n\n- Be direct but kind about the limitation\n- Suggest alternatives when possible\n- \"I can't do X, but I could help you with Y instead...\"\n\n### User Provides Feedback\n\n- Accept feedback gracefully\n- Adjust approach based on their input\n- \"Got it, I'll adjust. Let me try again...\"\n\n### Unclear Requests\n\n- Make your best interpretation and state your assumption\n- Offer to adjust: \"I understood this as X — let me know if you meant something else.\"\n\n## Response Formats\n\n### For Questions\n\nAnswer directly first, then provide context or caveats if needed.\n\n❌ \"That's a great question! There are many factors to consider...\"\n✅ \"Yes, you can do that. Here's how...\"\n\n### For Tasks\n\nDeliver the output, then offer adjustments.\n\n❌ \"Sure, I'd be happy to help with that! Let me think about...\"\n✅ [Provide the draft/solution] \"Let me know if you'd like any changes.\"\n\n### For Complex Topics\n\nUse structure when helpful:\n- Brief overview first\n- Key points or steps\n- Additional detail if needed\n\n### For Lists and Options\n\nKeep them scannable:\n- Short descriptions\n- Clear differentiation\n- Recommendation if asked\n\n## Examples\n\n**Simple Question:**\nUser: \"What's the capital of France?\"\nAssistant: \"Paris.\"\n\n**Request for Help:**\nUser: \"Can you help me write a message to reschedule a meeting?\"\nAssistant: \"Sure! Here's a draft:\n\n'Hi [Name], I need to reschedule our meeting originally set for [date]. Would [alternative time] work for you? Apologies for any inconvenience.'\n\nWant me to adjust the tone or add anything?\"\n\n**Ambiguous Request:**\nUser: \"Tell me about Python\"\nAssistant: \"Are you asking about Python the programming language or python snakes? I'll assume the programming language — let me know if you meant the reptile!\n\nPython is a popular programming language known for being easy to read and versatile. It's used for web development, data science, automation, and AI. Great choice for beginners and experts alike.\"\n\n**Can't Help:**\nUser: \"What's the weather right now?\"\nAssistant: \"I don't have access to real-time weather data. You can check a weather app or website for current conditions. Want help with something else?\"\n\n## Final Notes\n\nYour goal is to be the most helpful assistant possible within every conversation. This means:\n\n- Being genuinely useful, not just polite\n- Giving real answers, not hedged non-answers\n- Respecting the user's time with concise responses\n- Adapting to what each user actually needs\n\nEvery interaction is an opportunity to provide real value. This step is important.",
            "text": "# General AI Assistant - System Prompt\n\n## Personality\n\nYou are a helpful, intelligent AI assistant. You are friendly, knowledgeable, and efficient. You communicate clearly and adapt your tone to match the user's style — professional when needed, casual when appropriate.\n\nYou aim to be genuinely useful in every interaction. You're patient with questions, thorough in explanations, and honest about your limitations.\n\n## Goal\n\nProvide helpful, accurate, and relevant assistance to users:\n\n1. Understand the user's intent and respond appropriately\n2. Answer questions clearly and concisely\n3. Help with tasks, brainstorming, writing, and problem-solving\n4. Maintain context throughout the conversation\n5. Know when to ask clarifying questions vs when to proceed\n\nThis step is important: Always prioritize being helpful and accurate over being fast. Take time to understand what the user actually needs.\n\n## Core Capabilities\n\nYou can help with:\n\n- **Questions & Information** — Explain concepts, provide facts, offer perspectives\n- **Writing & Editing** — Draft messages, emails, posts, documents; improve existing text\n- **Brainstorming** — Generate ideas, explore options, think through problems\n- **Analysis** — Break down complex topics, compare options, identify patterns\n- **Planning** — Create outlines, schedules, step-by-step guides\n- **Conversation** — Casual chat, emotional support, friendly discussion\n- **Learning** — Explain topics at any level, provide examples, answer follow-ups\n\n## Conversation Guidelines\n\n### Starting Conversations\n\nWhen a user messages first, respond warmly but get to the point:\n\n\"Hey! How can I help you today?\"\n\nor\n\n\"Hi there! What can I help you with?\"\n\nNo need for lengthy introductions unless the user asks who you are.\n\n### Understanding Intent\n\nBefore responding to ambiguous requests:\n- Consider what the user most likely wants\n- If truly unclear, ask ONE focused clarifying question\n- When in doubt, make a reasonable assumption and offer to adjust\n\n### Response Length\n\nMatch your response length to the question:\n- Simple questions → Short, direct answers\n- Complex topics → Structured explanations with key points\n- Tasks → Appropriate detail for the deliverable\n\nFor messaging platforms, keep responses concise (1-4 short paragraphs) unless more detail is explicitly needed. This step is important.\n\n### Maintaining Context\n\n- Remember what's been discussed in the conversation\n- Reference earlier points when relevant\n- Build on previous exchanges naturally\n- Don't ask for information already provided\n\n## Tone Guidelines\n\n- Clear and direct — no unnecessary filler\n- Friendly but not performative\n- Confident but not arrogant\n- Helpful without being obsequious\n- Match formality to the user's style\n- Use simple language; avoid jargon unless appropriate\n- Emojis: use sparingly and only if the user does\n\n## Guardrails\n\n### Honesty\n\nNever make up facts or pretend to know things you don't. If uncertain, say so. This step is important.\n\nIf you don't have current information on a topic, acknowledge it: \"I don't have real-time data on that, but based on what I know...\"\n\n### Limitations\n\nBe clear about what you cannot do:\n- Cannot browse the internet or access live information\n- Cannot remember conversations after they end\n- Cannot take actions outside the conversation\n- Cannot access user's files, accounts, or personal data unless provided\n\n### Harmful Content\n\nDo not help with:\n- Illegal activities\n- Harming others\n- Deception or fraud\n- Dangerous information\n- Harassment or abuse\n\nIf asked, politely decline and offer to help with something else.\n\n### Privacy\n\n- Never ask for sensitive personal information (passwords, financial details, etc.)\n- Don't store or reference personal data beyond the current conversation\n- Respect user privacy in all interactions\n\n### Identity\n\nIf asked directly, acknowledge you are an AI assistant. Never pretend to be human.\n\n## Handling Difficult Situations\n\n### User is Frustrated\n\n- Acknowledge their frustration without being defensive\n- Focus on solving the problem\n- Stay calm and helpful\n- \"I understand that's frustrating. Let me try a different approach...\"\n\n### User Asks Something You Can't Help With\n\n- Be direct but kind about the limitation\n- Suggest alternatives when possible\n- \"I can't do X, but I could help you with Y instead...\"\n\n### User Provides Feedback\n\n- Accept feedback gracefully\n- Adjust approach based on their input\n- \"Got it, I'll adjust. Let me try again...\"\n\n### Unclear Requests\n\n- Make your best interpretation and state your assumption\n- Offer to adjust: \"I understood this as X — let me know if you meant something else.\"\n\n## Response Formats\n\n### For Questions\n\nAnswer directly first, then provide context or caveats if needed.\n\n❌ \"That's a great question! There are many factors to consider...\"\n✅ \"Yes, you can do that. Here's how...\"\n\n### For Tasks\n\nDeliver the output, then offer adjustments.\n\n❌ \"Sure, I'd be happy to help with that! Let me think about...\"\n✅ [Provide the draft/solution] \"Let me know if you'd like any changes.\"\n\n### For Complex Topics\n\nUse structure when helpful:\n- Brief overview first\n- Key points or steps\n- Additional detail if needed\n\n### For Lists and Options\n\nKeep them scannable:\n- Short descriptions\n- Clear differentiation\n- Recommendation if asked\n\n## Examples\n\n**Simple Question:**\nUser: \"What's the capital of France?\"\nAssistant: \"Paris.\"\n\n**Request for Help:**\nUser: \"Can you help me write a message to reschedule a meeting?\"\nAssistant: \"Sure! Here's a draft:\n\n'Hi [Name], I need to reschedule our meeting originally set for [date]. Would [alternative time] work for you? Apologies for any inconvenience.'\n\nWant me to adjust the tone or add anything?\"\n\n**Ambiguous Request:**\nUser: \"Tell me about Python\"\nAssistant: \"Are you asking about Python the programming language or python snakes? I'll assume the programming language — let me know if you meant the reptile!\n\nPython is a popular programming language known for being easy to read and versatile. It's used for web development, data science, automation, and AI. Great choice for beginners and experts alike.\"\n\n**Can't Help:**\nUser: \"What's the weather right now?\"\nAssistant: \"I don't have access to real-time weather data. You can check a weather app or website for current conditions. Want help with something else?\"\n\n## Final Notes\n\nYour goal is to be the most helpful assistant possible within every conversation. This means:\n\n- Being genuinely useful, not just polite\n- Giving real answers, not hedged non-answers\n- Respecting the user's time with concise responses\n- Adapting to what each user actually needs\n\nEvery interaction is an opportunity to provide real value. This step is important.",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        },
        {
          "key": "force_think_tool",
          "type": "bool",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "",
            "text": "",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        },
        {
          "key": "context_window_length",
          "type": "int",
          "value": {
            "stringToString": [],
            "int": "25",
            "string": "",
            "text": "",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        },
        {
          "key": "max_iterations",
          "type": "int",
          "value": {
            "stringToString": [],
            "int": "1",
            "string": "",
            "text": "",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        },
        {
          "key": "temperature",
          "type": "string",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "0.1",
            "text": "0.1",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        },
        {
          "key": "max_tokens",
          "type": "int",
          "value": {
            "stringToString": [],
            "int": "500",
            "string": "",
            "text": "",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        },
        {
          "key": "structured_output",
          "type": "bool",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "",
            "text": "",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        },
        {
          "key": "output_json_schema",
          "type": "string",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "",
            "text": "",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        }
      ],
      "coords": {
        "x": 111,
        "y": 37
      },
      "calculatedNodeType": {
        "id": "",
        "name": "",
        "alias": "",
        "description": "",
        "descriptionAttention": "",
        "params": [
          {
            "key": "__$$internal__use_custom_connection",
            "title": "",
            "type": "bool",
            "required": false,
            "description": "",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "model",
            "title": "Model",
            "type": "select",
            "required": true,
            "description": "",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": {
                "options": [
                  {
                    "key": "google/gemini-2.5-flash-lite",
                    "value": "google/gemini-2.5-flash-lite"
                  }
                ],
                "multiple": false,
                "fetchOn": [],
                "withLabel": false,
                "type": "",
                "pagination": {
                  "page": 0,
                  "context": "",
                  "supported": true
                },
                "query": {
                  "value": "",
                  "supported": false
                }
              },
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [
                "openai/gpt-4.1"
              ],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "session_id",
            "title": "Session ID",
            "type": "string",
            "required": false,
            "description": "Identifier used to load and separate conversation history. If provided, the agent will include the corresponding conversation history in the context. If empty or omitted, each request will be treated as a new session without history.\nFor example, this can be a chat ID or a user ID to distinguish different conversation threads.",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "user_prompt",
            "title": "User Prompt",
            "type": "string",
            "required": true,
            "description": "",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "system_message",
            "title": "System Message",
            "type": "string",
            "required": false,
            "description": "",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "You are a helpful assistant",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "force_think_tool",
            "title": "Force Think Tool",
            "type": "bool",
            "required": false,
            "description": "If enabled, the agent will always use the Think tool to write its reasoning, intermediate thoughts, or notes between main tool calls. It's recommended to connect only one Think tool to the agent.",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": true,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "context_window_length",
            "title": "Context Window Length",
            "type": "int",
            "required": true,
            "description": "Specifies the number of most recent message pairs (user and assistant) to include in the context window passed to the LLM. Increasing this value allows the model to consider a longer conversation history, which can improve coherence, but may also consume more tokens and affect performance.",
            "options": {
              "string": null,
              "int": {
                "max": 150,
                "min": 0,
                "fetchOn": []
              },
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "25",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "max_iterations",
            "title": "Max Iterations",
            "type": "int",
            "required": true,
            "description": "Defines the upper limit of tool invocations allowed for the LLM agent in a single reasoning process. If this threshold is reached, the agent will halt execution and respond with a message indicating it was stopped due to reaching the maximum iteration count.",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "10",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "temperature",
            "title": "Temperature",
            "type": "string",
            "required": false,
            "description": "What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "0.3",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "max_tokens",
            "title": "Max Tokens",
            "type": "int",
            "required": false,
            "description": "An upper bound for the number of tokens that can be generated for a completion",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "structured_output",
            "title": "Structured output",
            "type": "bool",
            "required": false,
            "description": "When enabled, the LLM will be forced to respond in JSON format. You should define the expected JSON structure and formatting rules in the prompt or in \"Output JSON Schema\"",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "output_json_schema",
            "title": "Output JSON Schema",
            "type": "string",
            "required": false,
            "description": "When specified, this JSON Schema defines the exact structure, types, and constraints of the expected JSON output from the LLM. The model will be guided to strictly follow this schema during generation. Example: `{ \"name\": \"output_schema\", \"schema\": { \"type\": \"object\", \"properties\": { \"output\": { \"type\": \"string\", \"description\": \"Provide output here\" } } } }`. You can read more info and generate schema [here](https://platform.openai.com/docs/guides/structured-outputs).",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "quick_preview_schema",
            "title": "",
            "type": "string",
            "required": false,
            "description": "",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          }
        ],
        "systemInfo": {
          "environment": "",
          "isPd": false,
          "isJsn": false,
          "pdAvailableGetLastRecords": false
        },
        "icon": null,
        "purposes": [],
        "isPublic": false,
        "billing": null,
        "tags": []
      }
    },
    {
      "id": "69722d6498faf1ffdee9f4d1",
      "title": "",
      "description": "",
      "localId": "4",
      "typeId": "67efe9cf53205c67c254df63",
      "params": [
        {
          "key": "access_token",
          "type": "connection",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "",
            "text": "",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "{{#69722c537ca6bb30500f6b37}}",
            "stringToAny": []
          }
        },
        {
          "key": "chatIds",
          "type": "select",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "",
            "text": "",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        }
      ],
      "coords": {
        "x": -28,
        "y": 37
      },
      "calculatedNodeType": {
        "id": "",
        "name": "",
        "alias": "",
        "description": "",
        "descriptionAttention": "",
        "params": [
          {
            "key": "access_token",
            "title": "Connection",
            "type": "connection",
            "required": true,
            "description": "",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": {
                "availableConnections": [
                  "unipile_wa"
                ],
                "fetchOn": []
              },
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "chatIds",
            "title": "Chat IDs",
            "type": "select",
            "required": false,
            "description": "Filter events by chats, by default all is selected",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": {
                "options": [],
                "multiple": true,
                "fetchOn": [],
                "withLabel": false,
                "type": "",
                "pagination": {
                  "page": 0,
                  "context": "",
                  "supported": true
                },
                "query": {
                  "value": "",
                  "supported": false
                }
              },
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "quick_preview_schema",
            "title": "Quick preview schema",
            "type": "string",
            "required": false,
            "description": "This field lets you format response data for easy reading. Define key-path pairs in JSON, where the key is the header and the value is the data path.\n\nExample: `{ \"Name\": \"result.user.name\", \"Email\": \"result.contact.email\" }`",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          }
        ],
        "systemInfo": {
          "environment": "",
          "isPd": true,
          "isJsn": true,
          "pdAvailableGetLastRecords": false
        },
        "icon": null,
        "purposes": [],
        "isPublic": false,
        "billing": null,
        "tags": []
      }
    },
    {
      "id": "69722e017ca6bb30500f6b47",
      "title": "",
      "description": "",
      "localId": "5",
      "typeId": "67efe9ce53205c67c254df5a",
      "params": [
        {
          "key": "access_token",
          "type": "connection",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "",
            "text": "",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "{{#69722c537ca6bb30500f6b37}}",
            "stringToAny": []
          }
        },
        {
          "key": "chatId",
          "type": "select",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "",
            "text": "",
            "select": [],
            "constructorParams": [],
            "custom": "{{$4.data.chat_id}}",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        },
        {
          "key": "text",
          "type": "string",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "{{$2.text}}\n\n---\n*Built with ❤️ on Latenode.com*",
            "text": "{{$2.text}}\n\n---\n*Built with ❤️ on Latenode.com*",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        },
        {
          "key": "attachment_name",
          "type": "string",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "",
            "text": "",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        },
        {
          "key": "attachment_body",
          "type": "string",
          "value": {
            "stringToString": [],
            "int": "0",
            "string": "",
            "text": "",
            "select": [],
            "constructorParams": [],
            "custom": "",
            "stringArray": [],
            "bool": false,
            "multiselect": [],
            "connection": "",
            "stringToAny": []
          }
        }
      ],
      "coords": {
        "x": 259,
        "y": 37
      },
      "calculatedNodeType": {
        "id": "",
        "name": "",
        "alias": "",
        "description": "",
        "descriptionAttention": "",
        "params": [
          {
            "key": "access_token",
            "title": "Connection",
            "type": "connection",
            "required": true,
            "description": "",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": {
                "availableConnections": [
                  "unipile_wa"
                ],
                "fetchOn": []
              },
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "chatId",
            "title": "Chat ID",
            "type": "select",
            "required": true,
            "description": "",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": {
                "options": [],
                "multiple": false,
                "fetchOn": [],
                "withLabel": false,
                "type": "",
                "pagination": {
                  "page": 0,
                  "context": "",
                  "supported": true
                },
                "query": {
                  "value": "",
                  "supported": false
                }
              },
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "text",
            "title": "Message Text",
            "type": "string",
            "required": false,
            "description": "The message that will start the new conversation. Either \"Message Text\" or \"Attachment File Body\" is required.",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "attachment_name",
            "title": "Attachment File Name",
            "type": "string",
            "required": false,
            "description": "Select a file name in the data pop-up window, for example: 1.body.files.[0].filename, or specify your own file name with an extension, for example: image.png. Required if \"Attachment File Body\" is filled in.",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "attachment_body",
            "title": "Attachment File Body",
            "type": "string",
            "required": false,
            "description": "Select a file content in the data pop-up window, for example: 1.body.files.[0].content, or pass the file URL,for example: https://file.png. Either \"Message Text\" or \"Attachment File Body\" is required.",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          },
          {
            "key": "quick_preview_schema",
            "title": "Quick preview schema",
            "type": "string",
            "required": false,
            "description": "This field lets you format response data for easy reading. Define key-path pairs in JSON, where the key is the header and the value is the data path.\n\nExample: `{ \"Name\": \"result.user.name\", \"Email\": \"result.contact.email\" }`",
            "options": {
              "string": null,
              "int": null,
              "text": null,
              "stringToString": null,
              "select": null,
              "stringArray": null,
              "bool": null,
              "connection": null,
              "stringToAny": null
            },
            "default": {
              "stringToString": [],
              "int": "0",
              "string": "",
              "text": "",
              "select": [],
              "constructorParams": [],
              "custom": "",
              "stringArray": [],
              "bool": false,
              "multiselect": [],
              "connection": "",
              "stringToAny": []
            },
            "optional": false
          }
        ],
        "systemInfo": {
          "environment": "",
          "isPd": true,
          "isJsn": true,
          "pdAvailableGetLastRecords": false
        },
        "icon": null,
        "purposes": [],
        "isPublic": false,
        "billing": null,
        "tags": []
      }
    }
  ],
  "gateways": [
    {
      "nodeId": "69722d6498faf1ffdee9f4d1",
      "localNodeId": "",
      "routes": [
        {
          "condition": {
            "type": "",
            "expression": {
              "value": "{{$4.data.is_sender = false}}"
            }
          },
          "label": "Not sender",
          "nodeId": "69722d6498faf1ffdee9f4cf",
          "localNodeId": "",
          "isFallback": false,
          "purpose": "input"
        }
      ],
      "name": "",
      "purpose": "output"
    },
    {
      "nodeId": "69722d6498faf1ffdee9f4cf",
      "localNodeId": "",
      "routes": [
        {
          "condition": {
            "type": "",
            "expression": {
              "value": ""
            }
          },
          "label": "",
          "nodeId": "69722e017ca6bb30500f6b47",
          "localNodeId": "",
          "isFallback": false,
          "purpose": "input"
        }
      ],
      "name": "",
      "purpose": "output"
    }
  ],
  "spaceId": "29",
  "ownerId": "29",
  "version": "18",
  "tags": [],
  "release": true,
  "latestLocalNodeId": "5",
  "environments": [
    {
      "id": "6972255a45cfaf856b120e5a",
      "alias": "prod",
      "name": "Prod",
      "actualVersion": "18",
      "isActive": true
    },
    {
      "id": "6972255a45cfaf856b120e5b",
      "alias": "dev",
      "name": "Dev",
      "actualVersion": "18",
      "isActive": true
    }
  ],
  "nodulInfo": {
    "isNodul": false,
    "isPublic": false,
    "isCodul": false
  },
  "readOnly": false,
  "executionBucket": "execution_bucket_default",
  "isUsersPublic": false
}