{"id":534,"date":"2025-03-28T17:00:44","date_gmt":"2025-03-28T17:00:44","guid":{"rendered":"https:\/\/neocloud05.com\/neo\/?page_id=534"},"modified":"2025-03-28T18:54:53","modified_gmt":"2025-03-28T18:54:53","slug":"laboratorio-2-0-4-modelo-conversacional-gemini","status":"publish","type":"page","link":"https:\/\/neocloud05.com\/neo\/laboratorio-2-0-4-modelo-conversacional-gemini\/","title":{"rendered":"Laboratorio 2.0.4 Modelo Conversacional Gemini"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"534\" class=\"elementor elementor-534\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dead8d3 e-flex e-con-boxed e-con e-parent\" data-id=\"dead8d3\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-41ce17a elementor-widget elementor-widget-heading\" data-id=\"41ce17a\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Neo 2.0.6 Beta\n(base Gemini)<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9f96e12 e-flex e-con-boxed e-con e-parent\" data-id=\"9f96e12\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ef60ff3 elementor-widget elementor-widget-html\" data-id=\"ef60ff3\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"es\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>Agente de IA<\/title>\r\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Roboto:wght@400;500;700&display=swap\" rel=\"stylesheet\">\r\n    <link href=\"https:\/\/fonts.googleapis.com\/icon?family=Material+Icons\" rel=\"stylesheet\">\r\n    <style>\r\n      body {\r\n        font-family: 'Roboto', sans-serif;\r\n        margin: 0;\r\n        padding: 0;\r\n        background-color: #f3f4f6; \/* Color de fondo gris claro *\/\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        min-height: 100vh;\r\n      }\r\n\r\n      #agente-container {\r\n        background-color: #ffffff; \/* Color de fondo blanco *\/\r\n        box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); \/* Sombra suave *\/\r\n        border-radius: 0.5rem; \/* Bordes redondeados *\/\r\n        width: 100%;\r\n        max-width: 800px; \/* Ancho m\u00e1ximo *\/\r\n        padding: 1.5rem; \/* Espaciado interior *\/\r\n        margin: 1rem; \/* Margen exterior *\/\r\n        box-sizing: border-box;\r\n      }\r\n\r\n      #chat-header {\r\n        display: flex;\r\n        align-items: center;\r\n        padding-bottom: 1rem;\r\n        margin-bottom: 1rem;\r\n        border-bottom: 1px solid #e5e7eb; \/* L\u00ednea separadora *\/\r\n      }\r\n\r\n      #chat-header h2 {\r\n        margin: 0;\r\n        font-size: 1.5rem; \/* Tama\u00f1o del t\u00edtulo *\/\r\n        color: #1f2937; \/* Color del texto del t\u00edtulo *\/\r\n        margin-left: 0.5rem;\r\n      }\r\n\r\n      #chat-messages {\r\n        overflow-y: auto;\r\n        max-height: 300px; \/* Altura m\u00e1xima del \u00e1rea de mensajes *\/\r\n        margin-bottom: 1rem;\r\n        padding: 0.5rem;\r\n        opacity: 0; \/* Inicialmente oculto *\/\r\n        transition: opacity 0.5s ease-in-out;\r\n      }\r\n\r\n      #chat-messages.visible {\r\n        opacity: 1; \/* Se vuelve visible al iniciar la conversaci\u00f3n *\/\r\n      }\r\n\r\n\r\n      .message {\r\n        display: flex;\r\n        margin-bottom: 1rem;\r\n      }\r\n\r\n      .message-content {\r\n        padding: 0.75rem 1rem;\r\n        border-radius: 0.5rem;\r\n        background-color: #eff6ff; \/* Color de fondo del mensaje del usuario *\/\r\n        color: #1f2937; \/* Color del texto del mensaje del usuario *\/\r\n        margin-left: 0.5rem;\r\n        margin-right: 0.5rem;\r\n        max-width: 80%; \/* Ancho m\u00e1ximo del mensaje *\/\r\n        word-wrap: break-word; \/* Permite saltos de l\u00ednea *\/\r\n      }\r\n      .message.received .message-content{\r\n         background-color: #f3f4f6;\r\n         color: #1f2937;\r\n      }\r\n\r\n      .message-sender {\r\n        font-weight: 500; \/* Texto en negrita para el nombre del remitente *\/\r\n        margin-bottom: 0.25rem; \/* Espacio inferior *\/\r\n        color: #6b7280;\r\n        display: block;\r\n        font-size: 0.875rem;\r\n      }\r\n\r\n      #input-container {\r\n        display: flex;\r\n        align-items: center;\r\n        padding-top: 1rem;\r\n        border-top: 1px solid #e5e7eb; \/* L\u00ednea separadora *\/\r\n        display: none; \/* Oculto al inicio *\/\r\n        opacity: 0;\r\n        transition: display 0s, opacity 0.5s ease-in-out; \/* Transici\u00f3n para opacity y display *\/\r\n      }\r\n\r\n      #input-container.visible {\r\n        display: flex; \/* Se muestra al iniciar la conversaci\u00f3n *\/\r\n        opacity: 1;\r\n      }\r\n\r\n\r\n      #text-input {\r\n        flex: 1;\r\n        padding: 0.75rem;\r\n        border-radius: 0.5rem;\r\n        border: 1px solid #d1d5db; \/* Borde del input *\/\r\n        margin-right: 0.5rem;\r\n        font-size: 1rem; \/* Tama\u00f1o del texto del input *\/\r\n        outline: none; \/* Elimina el borde al enfocar *\/\r\n      }\r\n\r\n      #text-input:focus {\r\n        border-color: #3b82f6; \/* Color del borde al enfocar *\/\r\n        box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15); \/* Sombra al enfocar *\/\r\n      }\r\n\r\n      .icon-button {\r\n        padding: 0.75rem;\r\n        border-radius: 9999px; \/* Hace que el bot\u00f3n sea circular *\/\r\n        background-color: transparent;\r\n        color: #6b7280; \/* Color del icono *\/\r\n        cursor: pointer;\r\n        display: flex; \/* Para centrar el icono *\/\r\n        align-items: center;\r\n        justify-content: center;\r\n        border: none;\r\n        outline: none;\r\n      }\r\n\r\n      .icon-button:hover {\r\n        background-color: #f3f4f6; \/* Color de fondo al pasar el mouse *\/\r\n        color: #3b82f6; \/* Color del icono al pasar el mouse *\/\r\n      }\r\n\r\n      .icon-button i {\r\n        font-size: 1.5rem; \/* Tama\u00f1o del icono *\/\r\n      }\r\n\r\n      #send-button {\r\n        background-color: #3b82f6; \/* Color de fondo del bot\u00f3n de enviar *\/\r\n        color: #ffffff; \/* Color del texto del bot\u00f3n de enviar *\/\r\n        padding: 0.75rem 1.5rem;\r\n        border-radius: 0.5rem;\r\n        font-weight: 500; \/* Texto en negrita *\/\r\n        border: none;\r\n        cursor: pointer;\r\n        transition: background-color 0.2s ease; \/* Transici\u00f3n suave *\/\r\n      }\r\n\r\n      #send-button:hover {\r\n        background-color: #2563eb; \/* Color de fondo al pasar el mouse *\/\r\n      }\r\n\r\n      #send-button:disabled {\r\n        background-color: #9ca3af; \/* Color de fondo cuando est\u00e1 deshabilitado *\/\r\n        cursor: not-allowed;\r\n      }\r\n\r\n      #file-input {\r\n        display: none;\r\n      }\r\n\r\n      .file-thumbnail {\r\n        display: flex;\r\n        align-items: center;\r\n        background-color: #f9fafb; \/* Color de fondo de la miniatura del archivo *\/\r\n        padding: 0.5rem;\r\n        border-radius: 0.25rem;\r\n        margin-top: 0.5rem;\r\n        border: 1px solid #e5e7eb;\r\n        max-width: 200px;\r\n        word-wrap: break-word;\r\n      }\r\n\r\n      .file-thumbnail i {\r\n        font-size: 1rem;\r\n        margin-right: 0.5rem;\r\n        color: #6b7280;\r\n      }\r\n\r\n      .file-thumbnail span {\r\n        font-size: 0.875rem;\r\n        color: #374151;\r\n      }\r\n      .image-thumbnail {\r\n        display: flex;\r\n        align-items: center;\r\n        margin-top: 0.5rem;\r\n        max-width: 200px;\r\n        max-height: 200px;\r\n        border-radius: 0.25rem;\r\n        overflow: hidden;\r\n      }\r\n      .image-thumbnail img{\r\n        width: 100%;\r\n        height: auto;\r\n      }\r\n      .speech-bubble {\r\n        position: relative;\r\n        background-color: #e0f2fe;\r\n        border-radius: 0.5rem;\r\n        padding: 0.75rem 1rem;\r\n        margin-left: 0.5rem;\r\n        margin-right: 0.5rem;\r\n        max-width: 80%;\r\n        word-wrap: break-word;\r\n        color: #0369a1;\r\n      }\r\n\r\n      .speech-bubble::before {\r\n        content: \"\";\r\n        position: absolute;\r\n        left: -0.5rem;\r\n        top: 0.75rem;\r\n        border-top: 0.5rem solid transparent;\r\n        border-right: 0.5rem solid #e0f2fe;\r\n        border-bottom: 0.5rem solid transparent;\r\n      }\r\n      .received .speech-bubble{\r\n         background-color: #f3f4f6;\r\n         color: #1f2937;\r\n      }\r\n      .received .speech-bubble::before {\r\n        left: auto;\r\n        right: -0.5rem;\r\n        border-left: 0.5rem solid #f3f4f6;\r\n        border-right: none;\r\n      }\r\n\r\n      #start-conversation {\r\n        background-color: #3b82f6;\r\n        color: #ffffff;\r\n        padding: 1rem 2rem;\r\n        border-radius: 0.5rem;\r\n        font-size: 1rem;\r\n        cursor: pointer;\r\n        transition: background-color 0.3s ease;\r\n        margin-top: 2rem;\r\n        text-align: center;\r\n      }\r\n\r\n      #start-conversation:hover {\r\n        background-color: #2563eb;\r\n      }\r\n\r\n      #start-conversation.hidden {\r\n        display: none;\r\n      }\r\n\r\n      @media (max-width: 640px) {\r\n        #agente-container {\r\n            margin: 1rem;\r\n            padding: 1rem;\r\n        }\r\n        #input-container {\r\n            flex-direction: column;\r\n        }\r\n        #text-input {\r\n            margin-bottom: 0.5rem;\r\n            margin-right: 0;\r\n        }\r\n        #send-button{\r\n          margin-top: 0.5rem;\r\n        }\r\n        .icon-button i {\r\n            font-size: 1.25rem;\r\n        }\r\n      }\r\n    <\/style>\r\n<\/head>\r\n<body>\r\n  <div id=\"agente-container\">\r\n    <div id=\"chat-header\">\r\n      <i class=\"material-icons\">smart_toy<\/i>\r\n      <h2>Agente de IA<\/h2>\r\n    <\/div>\r\n    <div id=\"chat-messages\">\r\n      <\/div>\r\n    <div id=\"input-container\">\r\n      <input type=\"text\" id=\"text-input\" placeholder=\"Escribe tu mensaje...\" \/>\r\n      <input type=\"file\" id=\"file-input\" accept=\"image\/*, .pdf, .doc, .docx\" \/>\r\n      <button id=\"image-button\" class=\"icon-button\" title=\"Adjuntar imagen\">\r\n        <i class=\"material-icons\">image<\/i>\r\n      <\/button>\r\n      <button id=\"file-button\" class=\"icon-button\" title=\"Adjuntar archivo\">\r\n        <i class=\"material-icons\">attach_file<\/i>\r\n      <\/button>\r\n      <button id=\"microphone-button\" class=\"icon-button\" title=\"Dictado de voz\">\r\n        <i class=\"material-icons\">mic<\/i>\r\n      <\/button>\r\n      <button id=\"send-button\" disabled>Enviar<\/button>\r\n    <\/div>\r\n    <div id=\"start-conversation\">\r\n      <i class=\"material-icons\">chat<\/i>\r\n      <span>Iniciar Conversaci\u00f3n<\/span>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    const chatMessages = document.getElementById(\"chat-messages\");\r\n    const textInput = document.getElementById(\"text-input\");\r\n    const sendButton = document.getElementById(\"send-button\");\r\n    const fileInput = document.getElementById(\"file-input\");\r\n    const fileButton = document.getElementById(\"file-button\");\r\n    const imageButton = document.getElementById(\"image-button\");\r\n    const microphoneButton = document.getElementById(\"microphone-button\");\r\n    const startConversationButton = document.getElementById(\"start-conversation\");\r\n    const inputContainer = document.getElementById(\"input-container\");\r\n\r\n    let isRecording = false;\r\n    let mediaRecorder;\r\n    let audioChunks = [];\r\n    const conversationHistory = []; \/\/ Array para almacenar la historia de la conversaci\u00f3n\r\n    let conversationStarted = false;\r\n\r\n    \/\/ Funci\u00f3n para agregar un mensaje al chat\r\n    function addMessage(sender, message, isFile = false, isImage = false) {\r\n      const messageElement = document.createElement(\"div\");\r\n      messageElement.classList.add(\"message\");\r\n      if (sender === \"T\u00fa\") {\r\n        messageElement.classList.add(\"sent\");\r\n      } else {\r\n        messageElement.classList.add(\"received\");\r\n      }\r\n\r\n      const messageContent = document.createElement(\"div\");\r\n      messageContent.classList.add(\"message-content\");\r\n\r\n      const senderElement = document.createElement(\"span\");\r\n      senderElement.classList.add(\"message-sender\");\r\n      senderElement.textContent = sender;\r\n      messageContent.appendChild(senderElement);\r\n\r\n      if (isFile) {\r\n        const fileThumbnail = document.createElement(\"div\");\r\n        fileThumbnail.classList.add(\"file-thumbnail\");\r\n        fileThumbnail.innerHTML = `<i class=\"material-icons\">insert_drive_file<\/i> <span>${message}<\/span>`;\r\n        messageContent.appendChild(fileThumbnail);\r\n      } else if (isImage) {\r\n        const imageThumbnail = document.createElement(\"div\");\r\n        imageThumbnail.classList.add(\"image-thumbnail\");\r\n        const img = document.createElement(\"img\");\r\n        img.src = message;\r\n        img.alt = \"Imagen adjunta\";\r\n        imageThumbnail.appendChild(img);\r\n        messageContent.appendChild(imageThumbnail);\r\n      } else {\r\n        messageContent.textContent = message;\r\n      }\r\n\r\n      messageElement.appendChild(messageContent);\r\n      chatMessages.appendChild(messageElement);\r\n      chatMessages.scrollTop = chatMessages.scrollHeight; \/\/ Auto-scroll\r\n\r\n      \/\/ Almacenar el mensaje en el historial\r\n      conversationHistory.push({ sender, message, type: isFile ? 'file' : isImage ? 'image' : 'text' });\r\n    }\r\n\r\n    \/\/ Evento al cambiar el texto del input\r\n    textInput.addEventListener(\"input\", () => {\r\n      sendButton.disabled = !textInput.value.trim(); \/\/ Deshabilitar si est\u00e1 vac\u00edo\r\n    });\r\n\r\n    \/\/ Evento al hacer clic en el bot\u00f3n de enviar\r\n    sendButton.addEventListener(\"click\", () => {\r\n      const message = textInput.value.trim();\r\n      if (message) {\r\n        addMessage(\"T\u00fa\", message);\r\n        textInput.value = \"\";\r\n        sendButton.disabled = true;\r\n        \/\/ Simulaci\u00f3n de respuesta del agente\r\n        setTimeout(() => {\r\n          \/\/ Aqu\u00ed se llama a la funci\u00f3n para obtener la respuesta del agente\r\n          getAgentResponse(message);\r\n        }, 1000);\r\n      }\r\n    });\r\n\r\n    \/\/ Evento al presionar Enter en el input\r\n    textInput.addEventListener(\"keydown\", (event) => {\r\n      if (event.key === \"Enter\" && !event.shiftKey && !sendButton.disabled) {\r\n        sendButton.click();\r\n        event.preventDefault(); \/\/ Evita el salto de l\u00ednea\r\n      }\r\n    });\r\n\r\n    \/\/ Evento al hacer clic en el bot\u00f3n de adjuntar archivo\r\n    fileButton.addEventListener(\"click\", () => {\r\n      fileInput.click(); \/\/ Simula el clic en el input de tipo file\r\n    });\r\n\r\n    \/\/ Evento al hacer clic en el bot\u00f3n de adjuntar imagen\r\n    imageButton.addEventListener(\"click\", () => {\r\n      fileInput.accept = \"image\/*\";\r\n      fileInput.click();\r\n    });\r\n\r\n    \/\/ Evento al cambiar el archivo seleccionado\r\n    fileInput.addEventListener(\"change\", (event) => {\r\n      const file = event.target.files[0];\r\n      if (file) {\r\n        if (file.type.startsWith(\"image\/\")) {\r\n          const reader = new FileReader();\r\n          reader.onload = (e) => {\r\n            addMessage(\"T\u00fa\", e.target.result, false, true);\r\n            setTimeout(() => {\r\n              getAgentResponse(\"He recibido una imagen. Procesando...\");\r\n            }, 1000);\r\n          };\r\n          reader.readAsDataURL(file);\r\n        } else {\r\n          addMessage(\"T\u00fa\", file.name, true);\r\n          setTimeout(() => {\r\n            getAgentResponse(\"He recibido un archivo. Analizando...\");\r\n          }, 1000);\r\n        }\r\n\r\n        fileInput.value = \"\"; \/\/ Limpiar el input\r\n      }\r\n    });\r\n\r\n    \/\/ Evento al hacer clic en el bot\u00f3n de micr\u00f3fono\r\n    microphoneButton.addEventListener(\"click\", () => {\r\n      if (isRecording) {\r\n        stopRecording();\r\n      } else {\r\n        startRecording();\r\n      }\r\n    });\r\n\r\n    \/\/ Funci\u00f3n para iniciar la grabaci\u00f3n de audio\r\n    function startRecording() {\r\n      navigator.mediaDevices\r\n        .getUserMedia({ audio: true })\r\n        .then((stream) => {\r\n          mediaRecorder = new MediaRecorder(stream);\r\n          mediaRecorder.ondataavailable = (event) => {\r\n            audioChunks.push(event.data);\r\n          };\r\n          mediaRecorder.onstop = () => {\r\n            const audioBlob = new Blob(audioChunks, { type: \"audio\/webm\" });\r\n            const audioUrl = URL.createObjectURL(audioBlob);\r\n            addMessage(\"T\u00fa\", \"Mensaje de voz\", true); \/\/ Muestra \"Mensaje de voz\"\r\n            audioChunks = [];\r\n\r\n            setTimeout(() => {\r\n              getAgentResponse(\"He recibido un mensaje de voz. Transcribiendo y analizando...\");\r\n            }, 1000);\r\n\r\n            \/\/ Aqu\u00ed puedes enviar el audioBlob a un servidor para su procesamiento\r\n            \/\/ Ejemplo:\r\n            \/\/ const formData = new FormData();\r\n            \/\/ formData.append('audio', audioBlob);\r\n            \/\/ fetch('\/upload', { method: 'POST', body: formData });\r\n\r\n            \/\/ Reproducir el audio localmente (opcional)\r\n            \/\/ const audio = new Audio(audioUrl);\r\n            \/\/ audio.play();\r\n          };\r\n          mediaRecorder.start();\r\n          isRecording = true;\r\n          microphoneButton.classList.add(\"recording\");\r\n          microphoneButton.querySelector(\"i\").textContent = \"stop\"; \/\/ Cambia el icono\r\n        })\r\n        .catch((error) => {\r\n          console.error(\"Error al acceder al micr\u00f3fono:\", error);\r\n          alert(\"No se pudo acceder al micr\u00f3fono. Aseg\u00farate de que est\u00e1 permitido en la configuraci\u00f3n del navegador.\");\r\n        });\r\n    }\r\n\r\n    \/\/ Funci\u00f3n para detener la grabaci\u00f3n de audio\r\n    function stopRecording() {\r\n      if (mediaRecorder) { \/\/ Verificar si mediaRecorder est\u00e1 definido\r\n        mediaRecorder.stop();\r\n      }\r\n      isRecording = false;\r\n      microphoneButton.classList.remove(\"recording\");\r\n      microphoneButton.querySelector(\"i\").textContent = \"mic\"; \/\/ Cambia el icono\r\n    }\r\n\r\n    \/**\r\n     * Funci\u00f3n para obtener la respuesta del agente de IA.\r\n     * @param {string} userInput - El mensaje del usuario.\r\n     *\/\r\n    function getAgentResponse(userInput) {\r\n      let response = \"\";\r\n      \/\/ Aqu\u00ed se implementa la l\u00f3gica de la IA para generar una respuesta basada en el input del usuario\r\n      \/\/ Se puede usar condicionales, patrones, o una API de IA m\u00e1s avanzada.\r\n      if (userInput.toLowerCase().includes(\"hola\")) {\r\n        response = \"\u00a1Hola! \u00bfC\u00f3mo puedo ayudarte hoy?\";\r\n      } else if (userInput.toLowerCase().includes(\"gracias\")) {\r\n        response = \"De nada. \u00a1Que tengas un buen d\u00eda!\";\r\n      } else if (userInput.toLowerCase().includes(\"archivo\")) {\r\n        response = \"He recibido tu archivo. Lo estoy procesando.\";\r\n      } else if (userInput.toLowerCase().includes(\"imagen\")) {\r\n        response = \"He recibido tu imagen. La estoy procesando\"\r\n      } else if (userInput.toLowerCase().includes(\"voz\") || userInput.toLowerCase().includes(\"audio\")) {\r\n        response = \"He recibido tu mensaje de voz, lo estoy analizando\"\r\n      } else {\r\n        response = \"Lo siento, no entiendo eso. Pero estoy aprendiendo.\";\r\n      }\r\n\r\n      \/\/ Agregar la respuesta del agente al chat\r\n      addMessage(\"Agente\", response);\r\n    }\r\n\r\n    \/\/ Evento para iniciar la conversaci\u00f3n\r\n    startConversationButton.addEventListener(\"click\", () => {\r\n      conversationStarted = true;\r\n      startConversationButton.classList.add(\"hidden\");\r\n      chatMessages.classList.add(\"visible\");\r\n      inputContainer.classList.add(\"visible\");\r\n      addMessage(\"Agente\", \"\u00a1Hola! Soy tu asistente de IA. \u00bfEn qu\u00e9 puedo ayudarte?\");\r\n    });\r\n\r\n    \/\/ Verificar si la conversaci\u00f3n ya ha sido iniciada\r\n    if (conversationStarted) {\r\n      startConversationButton.classList.add(\"hidden\");\r\n      chatMessages.classList.add(\"visible\");\r\n      inputContainer.classList.add(\"visible\");\r\n    }\r\n  <\/script>\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Neo 2.0.6 Beta (base Gemini) Agente de IA smart_toy Agente de IA image attach_file mic Enviar chat Iniciar Conversaci\u00f3n<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-534","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/neocloud05.com\/neo\/wp-json\/wp\/v2\/pages\/534","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/neocloud05.com\/neo\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/neocloud05.com\/neo\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/neocloud05.com\/neo\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/neocloud05.com\/neo\/wp-json\/wp\/v2\/comments?post=534"}],"version-history":[{"count":16,"href":"https:\/\/neocloud05.com\/neo\/wp-json\/wp\/v2\/pages\/534\/revisions"}],"predecessor-version":[{"id":566,"href":"https:\/\/neocloud05.com\/neo\/wp-json\/wp\/v2\/pages\/534\/revisions\/566"}],"wp:attachment":[{"href":"https:\/\/neocloud05.com\/neo\/wp-json\/wp\/v2\/media?parent=534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}