--- title: "Configurar la Event Function" url: https://docs.catalyst.zoho.com/es/tutorials/invoice-notifier/nodejs/configure-function/ description: "Crea una arquitectura dirigida por eventos para automatizar las actualizaciones de facturas de Zoho Books a Zoho Cliq usando Event Functions y Catalyst Signals." last_updated: 2026-08-17T12:16:04Z service: All Services type: tutorial related_links: - name: "Event Functions" url: /es/serverless/help/functions/event-functions/ - name: "Functions Directory Structure" url: /es/cli/v1/project-directory-structure/functions-directory --- # Configurar la Event Function Ahora configuremos la event function `Cliq_Notifier`, que envía automáticamente un mensaje a un canal de Zoho Cliq. Este mensaje incluirá los detalles de las facturas de los nuevos clientes que han completado exitosamente su pago. La función se ejecutará cuando sea activada por Catalyst Signals. El [directorio de funciones](https://docs.catalyst.zoho.com/es/cli/v1/project-directory-structure/functions-directory), `functions/Cliq_Notifier` contiene: - El archivo principal de la función `index.js` - El archivo de configuración `catalyst-config.json` - Los módulos de Node - Los archivos de dependencias `[package.json](https://docs.npmjs.com/files/package.json)` y `[package-lock.json](https://docs.npmjs.com/configuring-npm/package-lock-json.html)` Agregarás código en el archivo `index.js`. Nuestra función requerirá el paquete axios como dependencia para su funcionamiento eficiente. `axios` es un cliente HTTP basado en promesas que usaremos para enviar solicitudes HTTP asíncronas al endpoint de la API de Cliq para publicar mensajes. Para instalar `axios`, navega al directorio de la función de Node (`functions/Cliq_Notifier`) y ejecuta el siguiente comando: ```sh npm install axios ``` Esto instalará el módulo. ![installing axios dependencies](https://catalyst-docs-development.zohostratus.in/images/tutorials/invoice-notifier/axios-cli.webp) Esto también actualizará el archivo `Package.json` con la dependencia **axios** como se muestra en esta imagen. ![Add dependencies for the fucntion](https://catalyst-docs-development.zohostratus.in/images/tutorials/invoice-notifier/dependency.webp) Copia el código de Node.js y pégalo en `index.js` en el directorio `functions/Cliq_Notifier` de tu proyecto, y guarda el archivo. Puedes usar cualquier IDE de tu elección para trabajar con los archivos de la aplicación. > **Nota**: Por favor, revisa el código proporcionado en esta sección para asegurarte de que lo comprendes completamente. **index.js** ```javascript const axios = require('axios'); const catalyst = require('zcatalyst-sdk-node'); const ZBOOKSDOMAIN = "{{YOUR_ZBOOKS_DOMAIN}}"; //Ingresa tu dominio de ZohoBooks según tu región const ZBOOKSORG = "{{YOUR_ZBOOKS_ORGANIZATION_ID}}" //Ingresa tu ID de organización de ZohoBooks const ZCLIQDOMAIN = "{{YOUR_ZCLIQ_DOMAIN}}"; //Ingresa tu dominio de ZohoCliq según tu región const ZCLIQ_CHANNEL_UNIQUE_NAME = "{{YOUR_CHANNEL_UNIQUE_NAME}}" //Ingresa el nombre único del canal donde se deben publicar las actualizaciones const ZCLIQ_BOT_UNIQUE_NAME = "{{YOUR_BOT_UNIQUE_NAME}}" //Ingresa el nombre único del bot que publicará los mensajes const ZACCOUNTSDOMAIN = "{{YOUR_ZACCOUNTS_DOMAIN}}" //Ingresa tu dominio de ZohoAccounts según tu región module.exports = async (event, context) => { try { const rows = transformEventData(event.getRawData()); const requestBody = buildCliqRequestBody(rows); const accessToken = await getAccessToken(context); await sendToCliq(requestBody, accessToken); console.log("Message pushed to channel successfully"); context.closeWithSuccess(); } catch (error) { console.error('Error occurred:', error); context.closeWithFailure(); } }; function transformEventData(rawData) { let rows = rawData.data.flat(); for (let row of rows) { const invoiceId = row["Invoice Id"]; delete row["Invoice Id"]; row["Link"] = `https://${ZBOOKSDOMAIN}/app/${ZBOOKSORG}#/invoices/${invoiceId}`; } return rows; } function buildCliqRequestBody(rows) { return { slides: [{ type: "table", data: { headers: ["Customer", "Invoice Number", "Amount", "Paid On", "Link"], rows: rows } }], text: "Here are the invoices marked as Paid in the last hour:" }; } async function getAccessToken(context) { const app = catalyst.initialize(context); var connector = app.connection({ CliqConnector: { client_id: "{{YOUR_CLIENT_ID}}", //Ingresa tu Client ID client_secret: "{{YOUR_CLIENT_SECRET}}", //Ingresa tu Client Secret auth_url: `https://${ZACCOUNTSDOMAIN}/oauth/v2/auth`, refresh_url: `https://${ZACCOUNTSDOMAIN}/oauth/v2/token`, refresh_token: "{{YOUR_REFRESH_TOKEN}}" //Ingresa tu Refresh Token } }) .getConnector('CliqConnector'); return await connector.getAccessToken(); } async function sendToCliq(body, accessToken) { const cliqChannelURL = `https://${ZCLIQDOMAIN}/api/v2/channelsbyname/${ZCLIQ_CHANNEL_UNIQUE_NAME}/message?bot_unique_name=${ZCLIQ_BOT_UNIQUE_NAME}`; const headers = { 'Content-Type': 'application/json', 'Authorization': 'Zoho-oauthtoken ' + accessToken }; const response = await axios.post(cliqChannelURL, body, { headers }); } ``` > **Nota:** Después de copiar y pegar el código en tu archivo de función, asegúrate de actualizar los siguientes marcadores de posición con los valores reales, como se indica en los comentarios en línea: - **Dominio de Zoho Books (línea 4)**: Ingresa el dominio correspondiente a tu organización de [**Zoho Books**](https://www.zoho.com/in/books/), según tu región. Ejemplo: books.zoho.com, books.zoho.eu o books.zoho.in - **ID de organización de Zoho Books (línea 5)**: Proporciona el ID de organización único de tu cuenta de Zoho Books. - **Dominio de Zoho Cliq (línea 7)**: Especifica el dominio de tu organización de [Zoho Cliq](https://www.zoho.com/cliq/), según tu región. Ejemplo: cliq.zoho.com, cliq.zoho.eu - **Nombre único de tu canal de Zoho Cliq (línea 8)**: Ingresa el nombre único del [canal de Zoho Cliq](https://help.zoho.com/portal/es/kb/zoho-cliq/user-guides/channels) donde se deben publicar las actualizaciones de facturas pagadas. - **Nombre único de tu bot de Zoho Cliq (línea 9)**: Proporciona el nombre único del [bot de Zoho Cliq](https://www.zoho.com/cliq/help/platform/bots.html) que se ha agregado al canal anterior. - **Dominio de Zoho Accounts (línea 11)**: Indica el dominio de [Zoho Accounts](https://www.accounts.zoho.com/) utilizado para iniciar sesión en Catalyst, Zoho Books y Zoho Cliq. Ejemplo: accounts.zoho.com, accounts.zoho.in - **Client ID (línea 54)**: Pega el Client ID obtenido durante el registro del cliente en el [Paso 4](https://docs.catalyst.zoho.com/es/tutorials/invoice-notifier/nodejs/register-client/). - **Client Secret (línea 55)**: Pega el Client Secret correspondiente generado en el [Paso 4](https://docs.catalyst.zoho.com/es/tutorials/invoice-notifier/nodejs/register-client/). - **Refresh Token (línea 58)**: Proporciona el Refresh Token que generaste en el [Paso 5](https://docs.catalyst.zoho.com/es/tutorials/invoice-notifier/nodejs/refresh-token/) usando tu herramienta de cliente de API. La Event Function ahora está configurada.