# NodeJS -------------------------------------------------------------------------------- title: "Introducción" description: "Configura un bot asistente de ventas conversacional para un sitio web de ecommerce usando Catalyst ConvoKraft, funciones de Integration de Serverless y Zoho CRM que interactuará con los usuarios del sitio web y gestionará sus pedidos." last_updated: "2026-09-09T11:06:36.403Z" source: "https://docs.catalyst.zoho.com/es/tutorials/ecommerce-bot/nodejs/introduction/" service: "All Services" related: - Catalyst ConvoKraft Actions (/es/convokraft/help/actions/overview/introduction) - Catalyst ConvoKraft Handlers (/es/convokraft/help/handlers/welcome-message-handler) - Catalyst Serverless Functions (/es/serverless/help/functions/introduction/) - Catalyst CloudScale Web Client Hosting (/es/cloud-scale/help/web-client-hosting/introduction/) -------------------------------------------------------------------------------- # Ecommerce Bot ### Introducción Este tutorial te ayudará a construir un bot de ecommerce a través de Catalyst ConvoKraft que sirve como un asistente de ventas eficiente para tu sitio web de ecommerce. Considera una tienda en línea que vende dispositivos electrónicos y electrodomésticos a través de su sitio web. Construiremos un bot de ConvoKraft para el sitio web que permite a los usuarios tener conversaciones individuales interactivas en cualquier momento, sin tener que crear tickets de soporte o contactar al personal de atención al cliente para consultas más simples y directas o preguntas frecuentes. El bot de ecommerce puede mostrar la lista de productos disponibles en el inventario de la tienda, permitir a los usuarios realizar un pedido con la tienda, ver los detalles de un pedido, cambiar la dirección de entrega o reprogramar la entrega tentativa del pedido. El bot de ecommerce se verá así después de ser integrado en el sitio web: Puedes acceder a un bot de ecommerce funcional y probar su funcionamiento aquí: ¡Prueba la App! El bot de ecommerce utiliza los siguientes componentes fundamentales de ConvoKraft: * **Actions** : Configuraremos el bot de ecommerce para realizar operaciones como ver la lista de artículos disponibles en la tienda en línea, realizar un pedido, ver detalles de un pedido, cambiar la dirección de entrega y reprogramar la fecha de entrega. * **Bot Logic** : Configuraremos la lógica del bot de nuestro ecommerce bot usando Catalyst Integration Functions. La función manejará la lógica del backend de las actions que se configuren. En este tutorial, hemos codificado las funciones en Node.js16. * **Handlers** : Configuraremos respuestas en las funciones handler para saludar al usuario al iniciar una nueva conversación con el bot, informar al usuario sobre escenarios de falla o excepciones, y también para hacerle saber al usuario que el bot no puede comprender un mensaje en particular. La lógica de ejecución principal del bot también se configurará en una función handler y discutiremos más al respecto en esta sección. Nota: Integration Functions actualmente no está disponible para los usuarios de Catalyst que acceden desde los centros de datos EU, AU, IN o CA. Los usuarios que acceden desde estos DCs pueden en su lugar construir la lógica del bot con la opción de función Deluge. El bot de ConvoKraft también utiliza otros servicios de Catalyst y sus componentes incluyendo: 1. **Catalyst Serverless**: - **Functions** : Usaremos la Catalyst Integration function y codificaremos la lógica del bot de ConvoKraft en ella y luego asociaremos la función creada con nuestro bot de ConvoKraft. 2. **Catalyst Cloud Scale**: - **Web Client Hosting** : Para alojar la aplicación client, es decir, el sitio web, usaremos este componente del servicio Catalyst Cloud Scale. Integraremos el bot en el sitio web usando el paquete del SDK de Javascript del frontend proporcionado por Catalyst. También configuraremos el siguiente servicio de Zoho: * **Zoho CRM** : Para almacenar los productos en la tienda en línea y los datos de todos los pedidos realizados, crearemos módulos personalizados en Zoho CRM y lo usaremos como nuestra fuente de datos. Para obtener más información sobre la configuración de módulos personalizados, consulta esta sección. En este tutorial, se te proporcionará el código para construir el bot de ConvoKraft usando Catalyst Integration functions y un código de client simple para el sitio web de ecommerce. Solo tendrás que copiar el código proporcionado aquí y pegarlo en los archivos apropiados según las instrucciones. Configuraremos las actions necesarias para el bot, codificaremos la lógica de negocio, entrenaremos y probaremos el bot, y finalmente integraremos el bot en el sitio web. -------------------------------------------------------------------------------- title: "Requisitos previos" description: "Crea una aplicación web simple utilizando las funciones de Catalyst Authentication que proporciona registro de usuarios, inicio de sesión en la aplicación, restablecimiento de contraseña e implementa proveedores de inicio de sesión de Zoho y Google." last_updated: "2026-09-09T11:06:36.404Z" source: "https://docs.catalyst.zoho.com/es/tutorials/ecommerce-bot/nodejs/prerequisites/" service: "All Services" related: - Login Zoho CRM (https://www.zoho.com/en-in/crm/) - CLI Command Reference (/es/cli/v1/cli-command-reference/) - Install CLI (/es/getting-started/installing-catalyst-cli/) - Login CLI (/es/cli/v1/login/login-from-cli/) -------------------------------------------------------------------------------- # Requisitos previos Antes de comenzar a construir la aplicación, debes tener los siguientes requisitos previos instalados en tu sistema: 1. Catalyst CLI: Catalyst CLI contiene un conjunto de herramientas que te permiten inicializar, desarrollar, probar y desplegar los componentes de tu aplicación desde tu máquina local. Trabajaremos con Catalyst CLI en este tutorial. Debes realizar estas acciones: 1. Instalar Catalyst CLI: Catalyst CLI se instala a través de NPM. Por lo tanto, debes tener NPM y Node.js instalados en tu sistema antes de instalar el CLI. Consulta la **página de ayuda para instalar Catalyst CLI** para obtener detalles sobre los requisitos previos y los pasos para instalarlo. 2. Iniciar sesión en Catalyst CLI: Después de instalar Catalyst CLI, debes autenticar el CLI con tu cuenta de Catalyst antes de usarlo. Consulta la **página de ayuda para iniciar sesión en el CLI** para conocer los pasos para iniciar sesión desde Catalyst CLI y las diversas opciones disponibles. 2. Cualquier herramienta IDE para desarrollo en Node.js y código de cliente: Descarga e instala un IDE de tu elección en tu sistema. Puedes usar cualquier IDE para trabajar con la función y el código del client. Algunas opciones populares incluyen Visual Studio Code, IntelliJ IDEA, Eclipse y Sublime Text. Si eres usuario del IDE Visual Studio Code, puedes instalar la extensión Catalyst Tools y usar tu propio IDE en lugar del CLI. Puedes encontrar más detalles sobre la extensión de Catalyst para VS Code en esta sección de ayuda. 3. Cuenta de Zoho CRM: Necesitarás tener una cuenta de Zoho CRM configurada de cualquier edición como fuente de datos del inventario de productos y pedidos para la tienda de comercio electrónico. Si no tienes una cuenta de Zoho CRM, puedes registrarte aquí. -------------------------------------------------------------------------------- title: "Crear un proyecto" description: "Configura un bot asistente de ventas conversacional para un sitio web de comercio electrónico usando Catalyst ConvoKraft, funciones de Integration Serverless y Zoho CRM que interactuará con los usuarios del sitio web y gestionará sus pedidos." last_updated: "2026-09-09T11:06:36.404Z" source: "https://docs.catalyst.zoho.com/es/tutorials/ecommerce-bot/nodejs/create-a-project/" service: "All Services" related: - Catalyst ConvoKraft (/es/convokraft/) - Catalyst Project Creation (/es/getting-started/catalyst-projects/#create-a-catalyst-project) -------------------------------------------------------------------------------- # Crear un proyecto Primero, vamos a crear un proyecto de Catalyst desde la consola de Catalyst. 1. Inicia sesión en la consola de Catalyst y haz clic en Create new Project. <br/> 2. Ingresa el nombre del proyecto como "**Ecommerce**" en la ventana emergente que aparece. <br/> 3. Haz clic en Create. Tu proyecto será creado y abierto. <br/> Utilizaremos el servicio Catalyst ConvoKraft para este tutorial. -------------------------------------------------------------------------------- title: "Crear un bot" description: "Configura un bot asistente de ventas conversacional para un sitio web de comercio electrónico usando Catalyst ConvoKraft, funciones de Integration Serverless y Zoho CRM que interactuará con los usuarios del sitio web y gestionará sus pedidos." last_updated: "2026-09-09T11:06:36.405Z" source: "https://docs.catalyst.zoho.com/es/tutorials/ecommerce-bot/nodejs/create-a-bot/" service: "All Services" related: - Catalyst Integration Functions (/es/convokraft/help/actions/bot-logic/catalyst-integration-functions) -------------------------------------------------------------------------------- ### Crear un bot Comencemos creando un bot en ConvoKraft: 1. Navega al ícono del servicio ConvoKraft en el panel izquierdo de la consola de Catalyst. Haz clic en Start Exploring. <br /> 2. Haz clic en Create New Bot. 3. En la ventana emergente Create New Bot, ingresa el nombre del bot como "EcommerceBot". Proporciona una breve descripción del bot y también un ícono para tu bot, si es necesario. <br /> 4. Haz clic en Save. En la página que sigue, elige la plataforma de desarrollo sobre la cual deseas construir la lógica de negocio de tu bot. En este tutorial, codificaremos nuestra lógica de backend usando Functions de Catalyst Integration. Para obtener más información sobre las funciones de Catalyst Integration en detalle, consulta esta página. <br /> Debes seleccionar la función de integración a asociar con tu bot de ConvoKraft haciendo clic en el desplegable Select function. Crearemos la función de integración en las secciones posteriores de este tutorial. Nota: Puedes simplemente elegir Function, hacer clic en Save ahora y asociar la función de integración correspondiente más adelante en la página de detalles del bot. -------------------------------------------------------------------------------- title: "Configurar Actions" description: "Configura un bot asistente de ventas conversacional para un sitio web de comercio electrónico usando Catalyst ConvoKraft, funciones de Integration Serverless y Zoho CRM que interactuará con los usuarios del sitio web y gestionará sus pedidos." last_updated: "2026-09-09T11:06:36.405Z" source: "https://docs.catalyst.zoho.com/es/tutorials/ecommerce-bot/nodejs/configure-actions/" service: "All Services" related: - Create ConvoKraft bot (/es/convokraft/help/bots/create-a-bot/) - Create Action (/es/convokraft/help/actions/create-an-action/) -------------------------------------------------------------------------------- # Configurar Actions Después de crear el bot, necesitarás crear actions y configurar las respuestas de esas actions según sea necesario. Generalmente puedes elegir configurar la respuesta de una action para que esté basada en una lógica de negocio o una respuesta directa estática sin involucrar ninguna operación. En este tutorial, la respuesta de todas las actions se configurará basada en la ejecución de una lógica de negocio. Crearemos el siguiente conjunto de actions para el bot de comercio electrónico, de modo que los usuarios puedan interactuar directamente con el bot y realizar acciones cuando lo necesiten. * **Para listar los productos en la tienda de comercio electrónico** * **Para realizar un nuevo pedido** * **Para ver los detalles de un pedido** * **Para cambiar la dirección de entrega** * **Para reprogramar el pedido a una fecha posterior** Para configurar una action basada en las necesidades específicas de tu aplicación, debes definir las oraciones de ejemplo y los params apropiados para ella. En esta sección, discutiremos en detalle sobre las oraciones de ejemplo y los params a configurar para las actions mencionadas anteriormente para tu bot de comercio electrónico. Después de crear un bot de ConvoKraft y elegir la plataforma de desarrollo apropiada para construir la lógica de negocio, se mostrará la página de detalles del bot. Sigue los pasos listados a continuación para crear y configurar actions para el bot de comercio electrónico: 1. Haz clic en Create Action después de abrir el bot para agregar una nueva action. <br /> 2. Crearemos la primera action para nuestro bot de comercio electrónico para listar los artículos disponibles en la tienda. En la ventana emergente que se abre, proporciona el nombre de la action como "List the items available in Store". Selecciona la respuesta como Based on a business logic, luego haz clic en Next. <br /> 3. Configura las oraciones de ejemplo aplicables. De manera conversacional, el usuario activaría esta action de muchas formas, como "list the items available" o "what are the products available in the store?". <br /> 4. No configuraremos ningún param para esta action. Por lo tanto, puedes omitir este paso y proceder a hacer clic en Save. <br /> De manera similar, los pasos para crear las actions restantes del bot de comercio electrónico se indican a continuación. Los pasos mencionados anteriormente se aplicarán a todas las actions, y adicionalmente podrías necesitar crear params para ciertas actions. ### Place an Order 1. Crea una nueva action desde la página de detalles del bot para responder basándose en la lógica de negocio como se discutió en el paso anterior, y nómbrala como "Place an order". Las oraciones de ejemplo para esta action se pueden definir de la siguiente manera: * "I want to place an order" * "Need to place order" * "I have an account **amelia.burrows@zylker.com** and I would like to place an order of the product id : 18392188283 to be delivered on 11-Dec-2025" 2. Haz clic en Next después de configurar las oraciones. 3. Haz clic en New Param y selecciona el tipo de param, como se indica a continuación. Haz clic en String y se abrirá un cuadro de diálogo New Param. <br /> Proporciona el nombre del param como "productid" y agrega un mensaje de solicitud consultando la tabla a continuación. Para obtener más información sobre los atributos de cada tipo de param en detalle, consulta esta página. <br /> Crearemos los siguientes params para esta action: <table class="content-table"> <thead> <tr> <th>Param Type</th> <th>Name</th> <th>Prompt message</th> <th>Prompt message for validation failure</th> </tr> </thead> <tbody> <tr> <td>String</td> <td>productid</td> <td>Please enter the Product ID</td> <td>The entered ProductID is invalid. Please check and retry.</td> </tr> <tr> <td>Email</td> <td>cxemail</td> <td>Please enter your Email Address</td> <td>The entered email address is invalid. Please check and retry.</td> </tr> <tr> <td>Date</td> <td>cxdate</td> <td>Please enter the date on which you expect the delivery</td> <td>The entered date is invalid. Please check and retry.</td> </tr> <tr> <td>String</td> <td>cxaddr</td> <td>Please enter the address where you want the order to be delivered</td> <td>The entered address is invalid. Please check and retry.</td> </tr> </tbody> </table> De manera similar, crea los otros tres params, "cxemail", "cxdate" y "cxaddr" con el tipo de param y mensajes de solicitud como se mencionan en la tabla anterior. Nota: El modo de entrada para un param de fecha se puede seleccionar como Textual o Visual, según tus preferencias. 4. Puedes mapear los params con el texto correspondiente en las oraciones de ejemplo, para indicar al bot que solicite las entradas al usuario de forma consecutiva en la conversación. Para esto, pasa el cursor sobre el texto en la oración de ejemplo y elige el param correspondiente para asociarlos. <br /> 5. Después de configurar las oraciones de ejemplo y los params para la action, haz clic en Save. ### View Order Details 1. Crea una nueva action y elige configurar una respuesta basada en lógica de negocio. Nómbrala como "View Order Details". 2. Agrega las siguientes oraciones de ejemplo para la action: * "Where is my order?" * "I want to view my order details of email id amelia.burrows@zylker.com" * "I want to check my order details" 3. Define los params especificados a continuación para la action como se discutió en la sección anterior. Puedes asociar los params con la oración de ejemplo como se muestra en la captura de pantalla anterior y hacer clic en Save. <table class="content-table"> <thead> <tr> <th>Param Type</th> <th>Name</th> <th>Prompt message</th> <th>Prompt message for validation failure</th> </tr> </thead> <tbody> <tr> <td>Email</td> <td>cxemail</td> <td>Please provide the email address associated with your order</td> <td>The entered email address is invalid. Please check and retry.</td> </tr> </tbody> </table> <br /> ### Change Delivery Address 1. Similar a las actions creadas anteriormente, configuraremos la respuesta de esta action para que esté basada en una lógica de negocio. Ingresa el nombre de la action como "Change Delivery Address". Para esta action, puedes definir las oraciones de ejemplo indicadas a continuación: * "I want my order to be delivered at a different address" * "I want to change delivery address for my order id 5804508000000460006 under the email amelia.burrows@zylker.com" 2. Agrega los params indicados a continuación para la action: <table class="content-table"> <thead> <tr> <th>Param Type</th> <th>Name</th> <th>Prompt message</th> <th>Prompt message for validation failure</th> </tr> </thead> <tbody> <tr> <td>Email</td> <td>cxemail</td> <td>Please provide the email Address associated with your order.</td> <td>The entered email address is invalid. Please check and retry.</td> </tr> <tr> <td>String</td> <td>cxorderid</td> <td>Please enter your Order ID.</td> <td>The entered OrderID is invalid. Please check and retry.</td> </tr> <tr> <td>String</td> <td>cxaddr</td> <td>Please enter the address where you want the order to be delivered.</td> <td>The entered address is invalid. Please check and retry.</td> </tr> </tbody> </table> Puedes asociar los params como se muestra en la captura de pantalla a continuación y hacer clic en Save. <br /> ### Re-schedule order date 1. Ingresa el nombre de la action como "Reschedule order date". Puedes definir las siguientes oraciones de ejemplo para la action: * "Reschedule my order to later date" * "Postpone the delivery date of my order" * "I want to change my orders delivery date as 19/07/2023 for my order id 5804508000000460006 of my email amelia.burrows@zylker.com" 2. Agrega los params a continuación para la action: <table class="content-table"> <thead> <tr> <th>Param Type</th> <th>Name</th> <th>Prompt message</th> <th>Prompt message for validation failure</th> </tr> </thead> <tbody> <tr> <td>Email</td> <td>cxemail</td> <td>Please provide the email ID associated with your order.</td> <td>The entered email ID is invalid. Please check and retry.</td> </tr> <tr> <td>String</td> <td>cxorderid</td> <td>Please enter your Order ID.</td> <td>The entered OrderID is invalid. Please check and retry.</td> </tr> <tr> <td>Date</td> <td>cxdate</td> <td>Mention the date you would like to reschedule your order</td> <td>The entered date is invalid. Please check and retry.</td> </tr> </tbody> </table> <br /> Las actions están ahora configuradas para el bot. -------------------------------------------------------------------------------- title: "Crear módulos personalizados en CRM" description: "Configura un bot asistente de ventas conversacional para un sitio web de comercio electrónico usando Catalyst ConvoKraft, funciones de Integration Serverless y Zoho CRM que interactuará con los usuarios del sitio web y gestionará sus pedidos." last_updated: "2026-09-09T11:06:36.406Z" source: "https://docs.catalyst.zoho.com/es/tutorials/ecommerce-bot/nodejs/create-custom-modules-in-crm/" service: "All Services" related: - CRM Custom Modules (https://help.zoho.com/portal/es/kb/crm/customize-crm-account/customizing-modules/articles/customize-modules#Custom_Modules_or_User-Generated_Modules) -------------------------------------------------------------------------------- # Crear módulos personalizados en CRM Los módulos en Zoho CRM te permiten categorizar y rastrear varios aspectos de tu negocio. Crearemos dos módulos personalizados llamados EcomProducts y Orders para almacenar el inventario de productos y los pedidos realizados respectivamente. Puedes obtener más información sobre los módulos personalizados en la documentación de CRM. Para crear un módulo personalizado en CRM, sigue estos pasos: 1. Inicia sesión en tu cuenta de Zoho CRM. 2. Haz clic en Setup en la esquina superior derecha del panel de control como se muestra en la captura de pantalla a continuación, y en la sección Customization, haz clic en Modules and Fields. <br /> 3. Haz clic en New Module. <br /> #### EcomProducts Este módulo se usa para almacenar los detalles de los diversos productos disponibles en la tienda en línea de comercio electrónico. Asegúrate de agregar los campos indicados a continuación para el módulo personalizado EcomProducts. <table class="content-table"> <thead> <tr> <th>Field Name</th> <th>Type</th> </tr> </thead> <tbody> <tr> <td>EcomProductName</td> <td>Single Line</td> </tr> <tr> <td>Product_image</td> <td>URL</td> </tr> <tr> <td>Price</td> <td>Number</td> </tr> <tr> <td>Inventory Count</td> <td>Number</td> </tr> <tr> <td>EcomProduct Owner</td> <td>User</td> </tr> </tbody> </table> Puedes simplemente arrastrar y soltar el tipo de campo para agregar un nuevo campo. <br /> Después de agregar los campos, haz clic en Save. Proporciona el nombre del módulo como "EcomProducts" y selecciona el permiso del módulo como Administrator como se muestra en la captura de pantalla a continuación. <br /> Ahora puedes crear cualquier cantidad de productos agregándolos como registros en el módulo. Navega de vuelta a la página de módulos y haz clic en Ecomproducts desde el menú como se muestra en la captura de pantalla a continuación. <br /> Haz clic en **Create EcomProduct**. <br /> Proporciona los valores para todos los campos y haz clic en Save. <br /> #### Orders Este módulo se crea para almacenar los detalles de los pedidos de tu tienda en línea de comercio electrónico. Crea este nuevo módulo de manera similar a lo mencionado anteriormente y nómbralo "Orders". Luego puedes configurar los campos listados a continuación para este módulo personalizado: <table class="content-table"> <thead> <tr> <th>Field Name</th> <th>Type</th> </tr> </thead> <tbody> <tr> <td>Order Name</td> <td>Single Line</td> </tr> <tr> <td>Email</td> <td>Email</td> </tr> <tr> <td>Contact_No</td> <td>Phone</td> </tr> <tr> <td>Product_Name</td> <td>Single Line</td> </tr> <tr> <td>OrderID</td> <td>Single Line</td> </tr> <tr> <td>Order_Status</td> <td>Single Line</td> </tr> <tr> <td>Order_Owner</td> <td>User</td> </tr> </tr> <tr> <td>Modified By</td> <td>Single Line</td> </tr> <tr> <td>Price</td> <td>Number</td> </tr> <tr> <td>Delivery_Address</td> <td>Multi Line</td> </tr> <tr> <td>product_image_url</td> <td>URL</td> </tr> <tr> <td>Expected_Delivery_Date</td> <td>Single Line</td> </tr> </tbody> </table> Cada vez que el usuario realice un pedido conversando con el bot, se creará automáticamente una entrada en este módulo, es decir, se creará el registro. <br /> Los detalles del registro aparecerán de la siguiente manera: <br /> Nota: Asegúrate de usar exactamente los mismos nombres para los campos, ya que los hemos usado en la lógica de negocio de nuestro bot. -------------------------------------------------------------------------------- title: "Inicializar el proyecto" description: "Configura un bot asistente de ventas conversacional para un sitio web de comercio electrónico usando Catalyst ConvoKraft, funciones de Integration Serverless y Zoho CRM que interactuará con los usuarios del sitio web y gestionará sus pedidos." last_updated: "2026-09-09T11:06:36.406Z" source: "https://docs.catalyst.zoho.com/es/tutorials/ecommerce-bot/nodejs/initialize-project/" service: "All Services" related: - Catalyst Integration Functions (/es/convokraft/help/actions/bot-logic/catalyst-integration-functions) - Project Directory Structure (/es/cli/v1/project-directory-structure/introduction/) -------------------------------------------------------------------------------- # Inicializar el proyecto desde el CLI Después de configurar las actions para un bot, podemos proceder a configurar la lógica de negocio de esas actions. Como se mencionó anteriormente, utilizaremos funciones de Catalyst Integration para codificar la lógica del bot de comercio electrónico. Para codificar las funciones de Catalyst, primero necesitaremos inicializar el proyecto desde el Catalyst CLI. El primer paso es iniciar sesión en el CLI e inicializar el proyecto en un directorio local vacío. Este será el directorio principal de tu proyecto y todos los archivos del proyecto se guardarán en él. Puedes obtener más información sobre la estructura de directorios del proyecto para todos los stacks de programación soportados por Catalyst en esta página. Puedes aprender sobre la inicialización de un proyecto de Catalyst en detalle en la documentación de ayuda del CLI. Nota: Asegúrate de ingresar el nombre del paquete de la función exactamente como se indica, porque el código de la aplicación contiene el mismo nombre. Sigue los pasos listados a continuación para inicializar el proyecto y crear las funciones y componentes de client necesarios: 1. Crea una carpeta para el proyecto en tu máquina local y navega hasta ella desde la terminal del CLI. 2. Para inicializar el proyecto, ejecuta el siguiente comando: catalyst init 3. El CLI te pedirá que selecciones la organización predeterminada de Catalyst. Selecciona la organización en la que creaste el proyecto en el primer paso de este tutorial y presiona **Enter**. <br/> 4. Puedes asociar el directorio actual del proyecto con el proyecto de Catalyst que creaste en esta organización. Selecciona **Ecommerce** y presiona **Enter**. <br/> 5. Selecciona los componentes que necesitas configurar para tu aplicación de Catalyst. Navega a través de las opciones usando las teclas de flecha y selecciónalas presionando la barra espaciadora. Selecciona **Functions** y **Client** y presiona **Enter** para confirmar tus selecciones. <br/> 6. Selecciona el tipo de función que deseas desarrollar. Para este tutorial, elige **Functions** y **Client**. En el paso de configuración de Functions, selecciona **Integration**. <br/> 7. En el siguiente paso, selecciona el servicio como **Convokraft**. <br/> 8. Selecciona el stack preferido para desarrollar la función de Catalyst Integration y presiona **Enter**. Para este tutorial, codificaremos las funciones en **Node.js 16**. <br/> 9. Proporciona el nombre del paquete como "ecommerce_function" para tu función de Node cuando se te solicite y presiona **Enter**. También debes definir el punto de entrada como index.js y los detalles del autor en este paso. Nota: Asegúrate de ingresar el nombre del paquete de la función exactamente como se indica, porque el código de la aplicación contiene el mismo nombre. <br/> El directorio de la función ahora contendrá la función ecommerce_function inicializada, sus archivos de funciones handler y otros archivos de configuración. También puedes obtener más información sobre la estructura del directorio del proyecto en detalle en esta página. 10. El CLI iniciará la configuración del client a continuación. Selecciona **Basic web app** como tu tipo de client. <br/> 11. Ingresa ecommerceclient como el nombre del paquete del client y luego presiona **Enter**. Puedes ingresar cualquier nombre que necesites. <br/> El directorio del client se creará con la estructura estándar y se verá así: <br/> 12. Esta función de Catalyst en Node.js requiere el framework **express** para realizar operaciones de enrutamiento. Para instalar los módulos de express en el directorio de la función, navega a functions/ecommerce_function y ejecuta el siguiente comando en la terminal: npm install express -save <br/> El directorio de la función se verá así: <br/> La inicialización de Catalyst está ahora completa. El directorio del proyecto contendrá la función y el client, así como otros archivos de dependencias del proyecto. -------------------------------------------------------------------------------- title: "Configurar la función de Integration" description: "Configura un bot asistente de ventas conversacional para un sitio web de comercio electrónico usando Catalyst ConvoKraft, funciones de Integration Serverless y Zoho CRM que interactuará con los usuarios del sitio web y gestionará sus pedidos." last_updated: "2026-09-09T11:06:36.407Z" source: "https://docs.catalyst.zoho.com/es/tutorials/ecommerce-bot/nodejs/configure-function/" service: "All Services" related: - Project Directory Structure (/es/cli/v1/project-directory-structure/introduction/) -------------------------------------------------------------------------------- # Configurar la función de Integration A continuación, comenzaremos a codificar la lógica de ejecución del bot de comercio electrónico configurando la función de Integration que inicializamos anteriormente. El directorio de la función, functions/ecommerce_function contiene: - El archivo principal de la función index.js - Los archivos de funciones handler de ConvoKraft - El archivo de configuración catalyst-config.json - Módulos de Node - Archivos de dependencias package.json y package-lock.json Agregaremos código en las funciones handler: execute.js, fallback.js, failure.js, welcome.js, así como el archivo principal index.js. Copia y pega el código que se muestra a continuación cuidadosamente en los archivos respectivos usando cualquier IDE de tu elección y guárdalos. import logger from "./logger.js"; import fetch from "node-fetch"; import catalyst from "zcatalyst-sdk-node"; // Función para realizar solicitudes GET async function get(url, headers) { const response = await fetch(url, { method: 'GET', headers: headers }); return await response.json(); } function getRandomNumber(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } // Función para realizar solicitudes POST async function post(url, headers, body) { const response = await fetch(url, { method: 'POST', headers: headers, body: JSON.stringify(body) }); return await response.json(); } // Función para realizar solicitudes PUT async function put(url, headers, body) { const response = await fetch(url, { method: 'PUT', headers: headers, body: JSON.stringify(body) }); return await response.json(); } async function getCRMToken(request) { const catalystApp = catalyst.initialize(request); var connector = catalystApp.connection({ CRMTOKEN: { client_id: &#96;${process.env.client_id}&#96;, client_secret: &#96;${process.env.client_secret}&#96;, auth_url: &#96;${process.env.auth_url}&#96;, refresh_url: &#96;${process.env.refresh_url}&#96;, refresh_token: &#96;${process.env.refresh_token}&#96; } }).getConnector('CRMTOKEN'); let accessTokenResponse=await connector.getAccessToken().then((accessToken) => { //console.log("Inside accesstoken"+accessToken); return accessToken; }); return accessTokenResponse; } // Función para invocar URL async function invokeURL(options) { if (options.type === 'GET') { const response = await get(options.url, options.headers); return response; } else if (options.type === 'POST') { const response = await post(options.url, options.headers, options.body); return response; } else if (options.type === 'PUT') { const response = await put(options.url, options.headers, options.body); return response; } else { throw new Error(&#96;Unsupported HTTP method: ${options.type}&#96;); } } // Manejar la funcionalidad de ejecución export default async function handleExecute(request) { logger.info('Handling execute request with params : '+JSON.stringify(request)); logger.info('Action NameSpace : '+request.action.namespace); logger.info('Params : '+JSON.stringify(request.params)); logger.info('Broadcast : '+JSON.stringify(request.broadcast)); const result = {}; const cardlist = []; switch(request.action.namespace) { case "listofitems_2": logger.info('Inside NameSpace '+request.action.namespace); const executeViewItemsLogic = async () => { //let zohocrmapiurl=process.env.crmapiurl; console.log("ENV VARIABLE "+JSON.stringify(process.env)); //console.log("Client ID"+`${process.env.client_id}`); const token=await getCRMToken(request); //console.log("ACCESSTOKEN RESP : "+token); const accessToken = 'Zoho-Oauthtoken ' + token; logger.info('Access Token : '+accessToken); const header_data = new Map(); header_data.set('Content-Type', 'application/json'); header_data.set('Authorization', accessToken); const CRMresponse = await invokeURL({ url: 'https://'+process.env.crmapiurl+'/crm/v2/EcomProducts?fields=Name,Product_image_url,Price,Inventory_Count,Product_image', type: 'GET', headers: header_data }); logger.info("Response for list of items "+ JSON.stringify(CRMresponse)); const productNote = { "type": "note", "content": "List of items available are listed as follows" }; cardlist.push(productNote); for (const record of CRMresponse.data) { logger.info('RECPORD INFO : '+JSON.stringify(record)); const name = record.Name; const price = record.Price; const product_id = record.id; const image = record.Product_image; const inventory = record.Inventory_Count; const listItem = { "type": "list", "format": "bullet", "elements": [ { "label": `Name : ${name}` }, { "label": `Total Price : $ ${price}` }, { "label": `Product ID : ${product_id}` }, { "label": `Stock : ${inventory}` } ] }; const productPic = { "type": "image", "content": image }; cardlist.push(productPic); cardlist.push(listItem); logger.info('Card List : : : :'+JSON.stringify(cardlist)); } result.card= cardlist; result.message= "List of Objects in response"; logger.info('Result Obj inside the : : : ' + result); logger.info('Result OF MAP : : : :'+JSON.stringify(result)); }; await executeViewItemsLogic(); logger.info('Result Obj before return : : : ' + JSON.stringify(result)); return result; break; case "vieworderdetails_3": logger.info('Inside NameSpace ' + request.action.namespace); const executeViewOrderLogic = async () => { const token=await getCRMToken(request); var cxemail=request.params.cxemail; const accessToken = 'Zoho-Oauthtoken ' + token; logger.info('Access Token: ' + accessToken); const header_data = new Map(); header_data.set('Content-Type', 'application/json'); header_data.set('Authorization', accessToken); let resp={} try{ resp = await invokeURL({ url: 'https://'+process.env.crmapiurl+'/crm/v4/Orders/search?criteria=((Email:equals:' + cxemail + '))', type: 'GET', headers: header_data }); }catch(er) { logger.info('ERROR WHILE CRM DATA SEARCH ' + er); } logger.info('Response: ' + JSON.stringify(resp)); let items_count = 0; for (const order of resp.data) { items_count++; logger.info('Inside Resp Iterator - Item count : '+items_count+' Order details : '+JSON.stringify(order)); const order_id = order.id; const CRMresponse = await invokeURL({ url: 'https://'+process.env.crmapiurl+'/crm/v3/Orders/' + order_id, type: 'GET', headers: header_data }); logger.info("CRMRESPONSE : : : :"+JSON.stringify(CRMresponse.data[0].product_image_url)); const orderid = order.OrderID; const name = order.Name; const contact = order.Contact_No; const email = order.Email; const product_name = order.Product_Name; const price = order.Price; const delivery_date = order.Expected_Delivery_Date; const delivery_address = order.Delivery_Address; const order_status = order.Order_Status; const listItem = { "type": "list", "format": "bullet", "elements": [ { "label": "Name: " + name }, { "label": "Contact No: " + contact }, { "label": "Email ID: " + email }, { "label": "Product Name: " + product_name }, { "label": "Total Price: $" + price }, { "label": "Expected Delivery Date: " + delivery_date }, { "label": "Delivery Address: " + delivery_address }, { "label": "Order Status: " + order_status } ] }; const productNote = { "type": "note", "content": items_count + ") Your order details for order id : " + orderid + " are listed as follows: " }; const productPic = { "type": "image", "content": CRMresponse.data[0].product_image_url }; cardlist.push(productNote); cardlist.push(productPic); cardlist.push(listItem); logger.info("CARD LIST : : : "+JSON.stringify(cardlist)); } result.card = cardlist; // definir broadcast result.broadcast = { "cxemail": cxemail }; result.message = "The Shoppers Stores. You don't have an order."; logger.info("Result JSON : : : "+JSON.stringify(result)); }; await executeViewOrderLogic(); //logger.info('Result Obj before return: ' + JSON.stringify(result)); return result; break; case "placeanorder_4": logger.info('Inside NameSpace ' + request.action.namespace); const executePlaceOrderLogic = async () => { const placeorder = {}; const token=await getCRMToken(request); const accessToken = 'Zoho-Oauthtoken ' + token; logger.info('Access Token: ' + accessToken); const header_data = new Map(); header_data.set('Content-Type', 'application/json'); header_data.set('Authorization', accessToken); try { const CRMresponse = await invokeURL({ url: 'https://'+process.env.crmapiurl+'/crm/v2/EcomProducts/' + request.params.productid, type: 'GET', headers: header_data }); logger.info('CRM Response: ' + JSON.stringify(CRMresponse)); if (CRMresponse.data == null && CRMresponse.status != 'error') { const stock_count = 0; logger.info('Empty response. Stock count reset.'); placeorder.put('Stock', 'Empty'); } else { const recordid = CRMresponse.data[0].id; let stock_count = CRMresponse.data[0].Inventory_Count; const imageurl = CRMresponse.data[0].Product_image; const productname = CRMresponse.data[0].Name; const price = CRMresponse.data[0].Price; logger.info(recordid+" "+stock_count+" "+imageurl+" "+productname+" "+price); if (stock_count > 0) { stock_count = stock_count - 1; const reduceStock = { id: recordid, Inventory_Count: stock_count }; const updatedata = [reduceStock]; const updatedatamap = { data: updatedata }; const updateResp = await invokeURL({ url: 'https://'+process.env.crmapiurl+'/crm/v2/EcomProducts', type: 'PUT', body: updatedatamap, headers: header_data }); logger.info('Update Response: ' + JSON.stringify(updateResp)); placeorder.Name = productname + ' ' + request.params.cxdate; // Asignar el valor usando notación de punto placeorder.Product_Name = productname; // Asignar el valor usando notación de punto placeorder.Email = request.params.cxemail; // Asignar el valor usando notación de punto placeorder.Delivery_Address = request.params.cxaddr; // Asignar el valor usando notación de punto placeorder.Expected_Delivery_Date = new Date(request.params.cxdate).toLocaleDateString(); // Asignar el valor usando notación de punto placeorder.product_image_url = imageurl; // Asignar el valor usando notación de punto placeorder.Price = price; // Asignar el valor usando notación de punto const orderID = request.params.productid + '_' + getRandomNumber(1111111, 9999999); //placeorder.put('OrderID', orderID); placeorder.OrderID = orderID; placeorder.Order_Status = 'Reviewing the Order'; // Asignar el valor usando notación de punto const insertdatamap = { data: [placeorder] }; logger.info("INSERT MAP : : :"+JSON.stringify(insertdatamap)); const insertResp = await invokeURL({ url: 'https://'+process.env.crmapiurl+'/crm/v2/Orders', type: 'POST', body: insertdatamap, headers: header_data }); logger.info('Insert Response: ' + JSON.stringify(insertResp)); result.message = 'Your order for the product - ' + CRMresponse.data[0].Name + ' is placed successfully. It will be tried to be delivered on ' + request.params.cxdate + ' to ' + request.params.cxaddr + '. Our Sales team will reach out to you via email to discuss COD or prepayment before delivery.'; } else { result.message = 'The item is out of stock. Please retry after some days as we restock.'; } } } catch (e) { logger.info(e.lineNo); logger.info(e.message); logger.info(e); result.message = 'There was some issue during the order. Please contact the support team. They shall assist in placing this order for you.'; } result.broadcast = { cxemail: request.params.cxemail }; }; await executePlaceOrderLogic(); return result; break; case "changedeliveryaddress": // Nuevo caso para "changedeliveryaddress" logger.info('Inside NameSpace ' + request.action.namespace); const executeChangeDeliveryAddressLogic = async () => { const token=await getCRMToken(request); const cxorderid = request.params.cxorderid; const cxaddr = request.params.cxaddr; const cxemailid = request.params.cxemail; const accessToken = 'Zoho-Oauthtoken ' + token; logger.info('Access Token: ' + accessToken); const header_data = new Map(); header_data.set('Content-Type', 'application/json'); header_data.set('Authorization', accessToken); let searchOrderResp={}; try{ searchOrderResp = await invokeURL({ url: 'https://'+process.env.crmapiurl+'/crm/v4/Orders/search?criteria=((OrderID:equals:' + cxorderid + '))', type: 'GET', headers: header_data }); }catch(e) { logger.info("ERROR DURING SEARCH ORDER : : "+e); searchOrderResp={}; } logger.info("Result of search Order: : : "+JSON.stringify(searchOrderResp)); if(searchOrderResp.data!=undefined) { const recordId = searchOrderResp.data[0].id; //logger.info("Result of search Order: : : "+JSON.stringify(searchOrderResp.data[0])); const recordEmail=searchOrderResp.data[0].Email; const recordorderId=searchOrderResp.data[0].OrderID; if(cxemailid == recordEmail && cxorderid == recordorderId) { const updateData = [ { id: recordId, Delivery_Address: cxaddr } ]; const updateDataMap = { data: updateData }; const updateResp = await invokeURL({ url: 'https://'+process.env.crmapiurl+'/crm/v2/Orders', type: 'PUT', body: updateDataMap, headers: header_data }); logger.info('Update Response: ' + JSON.stringify(updateResp)); result.message = 'Delivery address updated successfully.'; } else{ result.message='Given Order ID or Email is not proper. Please check and retry'; } } else { result.message='Given Order ID or Email is not proper. Please check and retry'; } }; await executeChangeDeliveryAddressLogic(); return result; break; case "rescheduleorderdate": logger.info('Inside NameSpace ' + request.action.namespace); const executeChangeDeliveryDateLogic = async () => { const token=await getCRMToken(request); const accessToken = 'Zoho-Oauthtoken ' + token; logger.info('Access Token: ' + accessToken); const header_data = new Map(); header_data.set('Content-Type', 'application/json'); header_data.set('Authorization', accessToken); const cxemailid = request.params.cxemail; const cxorderid = request.params.cxorderid; let searchOrderResp={}; try{ searchOrderResp = await invokeURL({ url: 'https://'+process.env.crmapiurl+'/crm/v2/Orders/search?criteria=((OrderID:equals:' + request.params.cxorderid + '))', type: 'GET', headers: header_data }); }catch(e) { searchOrderResp={}; } if(searchOrderResp.data!=undefined){ logger.info("Result of search Order: : : "+JSON.stringify(searchOrderResp.data[0])); const recordId = searchOrderResp.data[0].id; const recordEmail=searchOrderResp.data[0].Email; const recordorderId=searchOrderResp.data[0].OrderID; if(cxemailid == recordEmail && cxorderid == recordorderId) { const datemap = { id: recordId, Expected_Delivery_Date: new Date(request.params.cxdate).toLocaleDateString() }; const updatedata = [datemap]; const updatedatamap = { data: updatedata }; logger.info("update Map : : : "+JSON.stringify(updatedatamap)); const updateResp = await invokeURL({ url: 'https://'+process.env.crmapiurl+'/crm/v2/Orders', type: 'PUT', body: updatedatamap, headers: header_data }); logger.info("updateResponse : : : "+JSON.stringify(updateResp)); result.broadcast = { cxemail: request.params.cxemail }; result.message = 'Your order has been rescheduled successfully.'; }else{ result.message='Given Order ID or Email is not proper. Please check and retry'; } } else{ result.message='Given Order ID or Email is not proper. Please check and retry'; } }; await executeChangeDeliveryDateLogic(); return result; break; default : result.message='Given request is invalid. Please check and retry'; return result; break; } //return response; } import logger from "./logger.js"; // Manejar la funcionalidad de bienvenida export default function handleWelcome() { logger.info('Handling welcome request'); return { "welcome_response": { "message": "Welcome to your Bot. Please ask your queries" } }; } import logger from "./logger.js"; // Manejar la funcionalidad de fallo export default function handleFailure() { logger.info('Handling failure request'); const result = { "message": "Something went wrong while checking your query. Please try again later." }; return JSON.stringify(result); } import logger from "./logger.js"; // Manejar la funcionalidad de respaldo export default function handleFallback() { logger.info('Handling fallback request'); const result = { "message": "Sorry couldn't get that." }; return JSON.stringify(result); } import logger from './logger.js'; import IntegResponse from './integ-response.js'; import handleWelcome from './welcome.js'; import handleFallback from './fallback.js'; import handleExecute from './execute.js'; import handleFailure from './failure.js'; export default async (request, response) => { let jsonResponse = {}; try { logger.info('REQUEST FLOW FOR : : : ' + request.todo); switch (request.todo) { case "welcome": jsonResponse = handleWelcome(); break; case "execute": jsonResponse = await handleExecute(request); break; case "fallback": jsonResponse = handleFallback(); break; case "failure": jsonResponse = handleFailure(); break; default: jsonResponse = JSON.stringify({ "message": "Error Trying to parse your details" }); } } catch (err) { logger.error('Error while executing handler: ' + err); logger.error('REQUEST OBJECT: ' + JSON.stringify(request)); jsonResponse = JSON.stringify({ "message": "Error Trying to parse your details" }); } //La respuesta debe ser encapsulada en un objeto IntegResponse response.end(new IntegResponse(jsonResponse)); }; Nota: Por favor, revisa todos los códigos dados en esta sección para asegurarte de que los entiendes completamente. Repasemos rápidamente cada uno de los archivos de funciones y la lógica codificada en ellos: 1. **execute.js**: Este archivo contiene la lógica principal de ejecución de todas las acciones de nuestro bot de comercio electrónico. Todas estas acciones autentican tu cuenta de Zoho CRM usando las variables de entorno configuradas y obtienen los detalles necesarios o realizan las acciones enumeradas a continuación, según sea necesario. Configuraremos las variables de entorno para la función ecommerce_function de Catalyst directamente desde la consola de Catalyst, después de implementar la función en la consola en este paso. * **listofitems_2** : Esta acción inicia una solicitud de API y activa un método GET en el módulo CRM personalizado EcomProducts, recuperando el nombre del producto, ID del producto, URL de la imagen del producto, precio y cantidad en stock. * **placeanorder_4** : Esta acción acepta el ID del producto como entrada del usuario. Luego verifica la disponibilidad de stock del producto en particular en el módulo CRM EcomProducts. Si el stock está disponible, el bot procede a pedir la dirección de correo electrónico del usuario, la fecha esperada de entrega y la dirección de entrega. Una vez que se ingresan estos detalles, el bot realiza un pedido iniciando una solicitud de API y activando un método POST en el módulo CRM personalizado Orders. Se informará al usuario sobre la colocación exitosa del pedido a través del chatbot. Si el stock del producto no está disponible, se informará lo mismo al usuario. * **vieworderdetails_3** : Esta acción activa la API de búsqueda de Zoho CRM para realizar una operación de búsqueda en el módulo personalizado Orders. El nombre del cliente, número de contacto, ID de correo electrónico, nombre del producto, precio del producto, URL de la imagen del producto, fecha esperada de entrega, dirección de entrega y estado del pedido se obtienen como respuesta. * **changedeliveryaddress** : Esta acción acepta el ID de correo electrónico asociado con el pedido, el ID del pedido y la dirección a la que se debe entregar el pedido, como entradas. Se activa la API de búsqueda de Zoho CRM en nuestro módulo personalizado Orders. Se validan el ID de correo electrónico y el ID del pedido dados y la nueva dirección se actualiza en el pedido ejecutando un método PUT en el módulo personalizado Orders. * **rescheduleorderdate** : Esta acción acepta el ID de correo electrónico asociado con el pedido y el ID del pedido como entradas. Se activa la API de búsqueda de Zoho CRM en nuestro módulo personalizado Orders, se realiza la operación de búsqueda para el ID del pedido dado. Se validan el ID de correo electrónico y el ID del pedido y la próxima fecha posible se actualiza como la fecha de entrega en el pedido nuevamente ejecutando un método PUT en el módulo personalizado Orders. Los nombres de acción mencionados anteriormente son espacios de nombres de la acción creada en la consola. Asegúrate de actualizar los espacios de nombres generados para tus acciones en el código en las líneas 82, 145, 238, 337, 407 para los casos de switch listofitems_2, vieworderdetails, placeanorder, changedeliveryaddress, rescheduleordertolaterdate respectivamente. Puedes obtener los espacios de nombres de la acción desde la consola como se muestra en la captura de pantalla a continuación. <br/> 2. **welcome.js**: En este archivo, hemos configurado el mensaje que se mostrará para saludar al usuario al iniciar una nueva conversación con el usuario. 3. **Fallback.js**: En este archivo, hemos configurado el mensaje que se mostrará al usuario cuando el bot no pueda comprender el mensaje del usuario. En este caso, esta respuesta se mostrará en la conversación hasta que el usuario ingrese la respuesta válida y el bot la entienda. 4. **failure.js**: En este archivo, hemos configurado el mensaje que se mostrará al usuario cuando ocurra una excepción al ejecutar la lógica empresarial. 5. **index.js**: Este es el punto de entrada de la función y aquí mapearemos los archivos handler correspondientes como execute, welcome, fallback o failure según el todo prompt durante la conversación del bot. -------------------------------------------------------------------------------- title: "Registrar el Client" description: "Configura un bot asistente de ventas conversacional para un sitio web de comercio electrónico usando Catalyst ConvoKraft, funciones de Integration Serverless y Zoho CRM que interactuará con los usuarios del sitio web y gestionará sus pedidos." last_updated: "2026-09-09T11:06:36.410Z" source: "https://docs.catalyst.zoho.com/es/tutorials/ecommerce-bot/nodejs/register-client/" service: "All Services" related: - Generate API Tokens (/es/api/oauth2/generate-access-and-refresh-token/#GenerateAccessandRefreshToken) -------------------------------------------------------------------------------- # Registrar el Client Necesitaremos generar tokens de acceso para autenticar y utilizar los recursos de CRM de manera efectiva. Asegúrate de seguir los pasos listados a continuación. 1. Inicia sesión en la consola de API de Zoho. Haz clic en **Self Client**. <br /> 2. Agrega el siguiente scope, luego establece la duración del scope y proporciona una descripción del scope. Haz clic en **Create**. Puedes obtener más información sobre los scopes en esta sección. <br /> 3. Selecciona **CRM** como el portal y elige tu proyecto en el panel derecho. Haz clic en **Create**. <br /> 4. Se generará el Grant token para los scopes especificados. Puedes obtener las credenciales de Client ID y Client Secret desde la pestaña Client Secret. Necesitarás generar los tokens de acceso y actualización siguiendo los pasos mencionados en esta página. <br /> Nota: Asegúrate de guardar estas credenciales. Configuraremos estos valores como variables de entorno en nuestra función en este paso. -------------------------------------------------------------------------------- title: "Configurar el client" last_updated: "2026-09-09T11:06:36.410Z" source: "https://docs.catalyst.zoho.com/es/tutorials/ecommerce-bot/nodejs/configure-client/" service: "All Services" related: - ConvoKraft JS SDK (/es/convokraft/sdk/js/overview/) -------------------------------------------------------------------------------- # Configurar el Client Ahora configuremos el componente client. El directorio del client que inicializaste contendrá: * El archivo index.html para el código HTML de la aplicación frontend * El archivo main.css para el código CSS * El archivo main.js para el código JavaScript * El archivo de configuración client-package.json Puedes descargar este zip, copiar todos los archivos que contiene y reemplazarlos con los archivos de client predeterminados creados en tu directorio de client. Este repositorio de git contiene archivos adicionales además de los predeterminados. Tenemos todo el código del client, y las imágenes e íconos necesarios empaquetados en él, simplemente puedes descargarlo como un archivo zip. Nota: Por favor, revisa el código en cada archivo para asegurarte de que lo comprendes completamente. Catalyst te permite alojar la parte del client de la aplicación web utilizando el componente Catalyst Web Client Hosting. Desplegaremos el client en la consola junto con las funciones creadas anteriormente, en este paso del tutorial. ### Incrustar el bot en el sitio web Para incrustar el bot de ConvoKraft en tu aplicación, asegúrate de agregar el fragmento de código JavaScript proporcionado a continuación en el archivo contact.html en tu directorio de client y guárdalo. También ofrecemos un paquete SDK de JavaScript de ConvoKraft que contiene métodos predefinidos que pueden incorporarse rápidamente en tu aplicación de client para personalizar la apariencia de tu bot de ConvoKraft. &lt;script src="https://console.catalyst.zoho.com/convokraft/assets/js/convokraft-chat-sdk.js"&gt; &lt;/script&gt; &lt;style&gt; div.anchor_zia_toBottom { width: 330px; height: 450px; position: fixed; bottom: 0; right: 0; } &lt;/style&gt; &lt;div class="anchor_zia_toBottom"&gt; &lt;convokraft-chat-bot bot-name="ecommercebot_2" project-id="10644000000029001" org-id="74779991"&gt; &lt;/convokraft-chat-bot&gt; &lt;/div&gt; Nota: Asegúrate de reemplazar los valores correctos para los atributos de nombre del bot, ID del proyecto e ID de la organización en el código anterior. Abre el EcommerceBot en la consola y en la página de detalles del bot, el espacio de nombres del bot es el valor de este atributo bot-name. Toma la URL de esta página. Debería aparecer de la siguiente manera: https://console<span></span>.catalyst.zoho.com/baas/74779991/project/10644000000029001/Development#/convokraft/bots/50803000000018005 Aquí "74779991" es el orgID y "10644000000029001" es el projectID. -------------------------------------------------------------------------------- title: "Desplegar en la consola" description: "Configura un bot asistente de ventas conversacional para un sitio web de comercio electrónico usando Catalyst ConvoKraft, funciones de Integration Serverless y Zoho CRM que interactuará con los usuarios del sitio web y gestionará sus pedidos." last_updated: "2026-09-09T11:06:36.411Z" source: "https://docs.catalyst.zoho.com/es/tutorials/ecommerce-bot/nodejs/deploy-to-console/" service: "All Services" related: - Deploy Catalyst Project (/es/cli/v1/deploy-resources/introduction/) -------------------------------------------------------------------------------- # Desplegar en la consola Para entrenar y probar el bot de comercio electrónico configurado en ConvoKraft desde la consola, primero necesitarás desplegar el proyecto en la consola. 1. Para desplegar tu proyecto de Catalyst desde el CLI, ejecuta el siguiente comando en tu terminal desde el directorio de tu proyecto: catalyst deploy <br /> Después de desplegar el directorio de funciones, estará disponible en el componente Serverless Functions de la consola de Catalyst. <br /> 2. Haz clic en el nombre de la función ecommerce_function. Cambia a la pestaña Code. Puedes editar la función desde aquí y hacer clic en Save, si es necesario. <br /> 3. Cambia a la pestaña **Configuration** y expande la pestaña **Environmental variables**. Haz clic en **Create Variable**. <br /> 4. Proporciona la clave como client_id y agrega el valor del ClientID que guardamos anteriormente en este paso como valor de desarrollo aquí. Haz clic en **Save**. <br /> De manera similar, debes crear las siguientes variables de entorno: <table class="content-table"> <thead> <tr> <th>Key</th> <th>Development Value</th> </tr> </thead> <tbody> <tr> <td>client_secret</td> <td>Value fetched from the API console</td> </tr> <tr> <td>auth_url</td> <td>https://accounts.zoho.com/oauth/v2/auth</td> </tr> <tr> <td>refresh_url</td> <td>https://accounts.zoho.com/oauth/v2/token</td> </tr> <tr> <td>refresh_token</td> <td>Value fetched from the API console</td> </tr> <tr> <td>crmapiurl</td> <td>www.zohoapis.com</td> </tr> </tbody> </table> Nota: 1. Los valores de client_secret y refresh_token son las credenciales generadas en este paso. 2. Para los valores de crmapiurl, auth_url, refresh_url, asegúrate de agregar las URLs específicas de tu DC. Antes de proceder a alojar el client, necesitamos asociar la función de Catalyst creada con nuestro bot de ConvoKraft. Asegúrate de seguir los pasos listados a continuación. Navega al servicio ConvoKraft y haz clic en EcommerceBot. Se mostrará la página de detalles del bot. Haz clic en Edit Details como se muestra en la captura de pantalla a continuación: <br /> En el cuadro de diálogo Edit Bot, selecciona ecommerce_function, elige At the end of an action context y haz clic en Save. <br /> Navega al servicio Cloud Scale haciendo clic en su ícono en el panel izquierdo de la consola de Catalyst como se muestra en la captura de pantalla a continuación. Haz clic en Web Client Hosting. Puedes acceder a la URL del client alojado desde aquí. Para obtener más información sobre el componente de Web Client Hosting, puedes consultar esta página. -------------------------------------------------------------------------------- title: "Entrenar y probar el bot" description: "Configura un bot asistente de ventas conversacional para un sitio web de comercio electrónico usando Catalyst ConvoKraft, funciones de Integration Serverless y Zoho CRM que interactuará con los usuarios del sitio web y gestionará sus pedidos." last_updated: "2026-09-09T11:06:36.412Z" source: "https://docs.catalyst.zoho.com/es/tutorials/ecommerce-bot/nodejs/train-and-test-the-bot/" service: "All Services" related: - Project Directory Structure (/es/cli/v1/project-directory-structure/introduction/) -------------------------------------------------------------------------------- # Entrenar y probar el bot Después de crear las actions necesarias y configurar la lógica de negocio para ellas, puedes entrenar y probar el bot con todas las actions desde la página de detalles del bot haciendo clic en Train y Test this bot respectivamente. <br /> Puedes elegir seleccionar una tarea de las sugerencias mostradas o iniciar conversaciones nuevas en la ventana de chat. Para obtener más información sobre la función Test this bot, consulta esta página. Haz clic en **list the items available in the store**. <br /> El bot obtiene la lista del módulo CRM EcomProducts y la muestra al usuario. <br /> Puedes ver la lista de artículos disponibles y tomar nota de los IDs de producto necesarios para realizar un pedido en el siguiente paso. <br /> A continuación, haz clic en **I want to place an order**. Proporciona los detalles solicitados por el bot como el ID del producto, la dirección de correo electrónico y la dirección de entrega. <br /> El pedido se ha realizado exitosamente. <br /> Toma nota del orderID, para usarlo y verificar más detalles de tu pedido con el EcommerceBot. Ahora, intentemos ver los detalles de nuestro pedido. Haz clic en **View my Order**. Proporciona la dirección de correo electrónico asociada con tu pedido. <br /> Los detalles del pedido se han obtenido del módulo CRM Orders. De manera similar, puedes reprogramar tu pedido a una fecha posterior haciendo clic en la sugerencia correspondiente. También puedes escribir tu consulta directamente para chatear con el bot. <br /> El pedido se ha reprogramado exitosamente. De manera similar, también puedes cambiar la dirección de entrega de tu pedido, si es necesario. <br /> El pedido se ha actualizado con su nueva dirección de entrega. Ahora, hemos probado exitosamente nuestro bot en el entorno de desarrollo. Lo desplegaremos a producción en la siguiente sección. -------------------------------------------------------------------------------- title: "Desplegar a producción" description: "Configura un bot asistente de ventas conversacional para un sitio web de comercio electrónico usando Catalyst ConvoKraft, funciones de Integration Serverless y Zoho CRM que interactuará con los usuarios del sitio web y gestionará sus pedidos." last_updated: "2026-09-09T11:06:36.412Z" source: "https://docs.catalyst.zoho.com/es/tutorials/ecommerce-bot/nodejs/deploy-to-production/" service: "All Services" related: - Project Directory Structure (/es/cli/v1/project-directory-structure/introduction/) -------------------------------------------------------------------------------- # Desplegar a producción Después de haber probado el bot de comercio electrónico en el entorno de desarrollo, puedes proceder a desplegar el bot en el entorno de producción. Esto se hace desplegando el bot específico de ConvoKraft solo, y luego el proyecto completo a producción para habilitar el despliegue de la función asociada. 1. Para desplegar el bot en el entorno de producción, navega a la página de detalles del bot y haz clic en **Deploy to Production**. <br /> 2. En el cuadro de diálogo *Deploy to Production*, habilita **Include Catalyst Function Properties**. Elige el tipo de release necesario y haz clic en **Deploy**. <br /> 3. Después de desplegar tu bot a producción, puedes cambiar al entorno de producción directamente desde la consola, como se muestra en la captura de pantalla a continuación. <br /> Ahora puedes verificar las estadísticas de uso de tu bot después de comenzar a usarlo haciendo clic en la pestaña **Usage stats** en la página de detalles del bot. Para obtener más información sobre las estadísticas de uso, consulta esta página. <br /> Nota: Las pestañas Client y Usage stats solo están habilitadas en el entorno de producción.